我有一个相当标准的init函数传递给变量。
var initFunction = function()...
和#34;函数initFunction(){}"相同,不是吗? (内部,JavaScript也会创建一个变量)
如果我在init函数中声明了一个函数变量,并在它的声明之前调用它,那么它必须是可访问的,因为函数中的所有定义(var' s)都是在第一次初始化时。这就是我认为JS的本质。
以下代码不起作用(innerFunction未定义)
var initFunction = function(){
if(0 == 0){
innerFunction();
}
var innerFunction = function(){
alert("Hello World");
};
};
initFunction();
顺便说一下:用分号关闭所有功能是不错的做法?
祝你好运
答案 0 :(得分:3)
此处的问题称为可变提升。当你这样做时:
var innerFunction = function(){
alert("Hello World");
};
通话时间将为:
var innerFunction = null; // Or undefined may be.
然后在定义之后,它被定义。然而,当您用以下代码替换代码时
if (0 == 0) {
innerFunction();
}
function innerFunction() {
alert("Hello World");
} // Notice no semi colon.
首先定义整个函数。如果您想使用函数表达式而不是声明,则需要将定义放在调用的顶部。
现在这可行。
var initFunction = function(){
var innerFunction = function(){
alert("Hello World");
};
if (0 == 0) {
innerFunction();
}
};
使用分号关闭所有功能是不错的做法?
对于函数表达式,是这是一个很好的做法。对于正常的函数声明(使用function
关键字而不是匿名函数),没有必要。
答案 1 :(得分:2)
和#34;函数initFunction(){}"相同,不是吗? (
没有。函数声明被提升。函数表达式不是。 (你有一个函数表达式)。
您尝试在将值分配给innerFunction();
之前调用innerFunction
(稍后两行)。