php和javascript如何执行嵌套函数之间的区别

时间:2019-06-24 17:25:25

标签: javascript php function nested-function

我正在尝试可视化javascript和php如何处理嵌套函数。

重点是:

php

b(); //CANNOT call b at this point because isn't defined yet
a(); //CAN call a at this point because the interpreter see the declar
b(); //ok now i can call b, because the interpreter see the declaration after a execution
function a(){
    function b(){
        echo "inner";
    }
}

同时在 javascript 中:

b(); //CANNOT call b isn't defined yet
a(); //CAN call a at this point because the interpreter see the declar

function a(){
    function b(){
        console.log("inner");
    }
}
a(); //ok now i can call a because is defined
b(); // **CANNOT** call b yet !!   

为什么在javascript中即使执行a也不能调用b()? PHP有什么不同?

先谢谢!

1 个答案:

答案 0 :(得分:1)

它是作用域的东西。您可以像用javascript一样轻松地编写“ var b = function()”。 “ b”只是在函数a范围内定义的类型函数的变量。在PHP中,“ a”和“ b”都是全局函数,但是定义“ b”是函数“ a”的工作,因此只有在调用“ a”后才能定义它。考虑这个例子...

function a($x) {
    if ($x) {
        function b() { echo "x not empty"; }
    } else {
        function b() { echo "x empty"; }
    }
}
a(1);    // Defines function b
b();     // x not empty
a(0);    // PHP Fatal error:  Cannot redeclare b() (previously declared...

通过重新定义“ b”失败,您可以看到“ b”是真正的全局作用域函数。函数“ a”可以使用各种标准来为不同运行中的特定目的定义函数。显然,在这种情况下,在函数“ a”决定如何定义函数之前,调用函数“ b”没有任何意义。

顺便说一句,我不认为上面的示例是很好的编码实践,但确实可以说明这一点。

与您的javascript代码最相似的PHP代码是:

function a() {
    $b = function() {
            echo "'b' says inner";
         };
    $b();    // Demonstrating the function can be used inside "a"
}
a();    // 'b' says inner

$ b是函数类型的变量,只能在函数“ a”内使用。