我正在尝试可视化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有什么不同?
先谢谢!
答案 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”内使用。