分配给函数会覆盖函数还是创建隐式全局?
Does assigning to a function overwrite the function or create an implicit global?
在JavaScript中我们可以声明一个函数然后赋值给它,如下:
function spam() { return "spam 'n eggs"; }
spam = spam();
spam(); // TypeError: spam is not a function.
此代码是否会更改名为 spam 的全局变量的值,或者创建一个隐藏函数 spam 的隐式全局变量?
它不会覆盖函数,但会为该变量分配一个字符串。第一行定义的函数 return 是一个字符串,因为第二行设置 spam
等于 return 值(因为函数被调用(注意括号))所以垃圾邮件是string.
在浏览器控制台试试这个:window.spam
。在第一行之后,它应该显示该功能。然后在第二行之后它应该显示该字符串。
function spam() {
return "spam 'n eggs";
}
console.log('typeof spam: ',typeof spam, 'typeof window.spam: ',typeof window.spam);
spam = spam(); //spam is assigned a string
console.log('typeof spam: ',typeof spam, 'typeof window.spam: ',typeof window.spam);
spam(); // TypeError: spam is not a function.
如果我们将该代码移到一个函数中,var 关键字可用于局部范围:
function assignSpam() {
var spam = function() { return "spam 'n eggs"; }
console.log('typeof spam after initial assignment: ',typeof spam);
spam = spam(); //spam is assigned a string
console.log('typeof spam after assigning to spam(): ',typeof spam);
spam(); // TypeError: spam is not a function.
}
assignSpam();
spam; //undefined
服务器端的结果应该相似javascript(例如 NodeJS)。
Does this code overwrite the function held by a global variable called spam,
没有。分配给 spam 的初始值是对该函数的引用。分配一个新值不会改变函数,它只是将一个新值分配给 spam.
例如
function spam(){return 'I am spam';}
var b = spam;
spam = spam();
console.log(spam) // 'I am spam'
console.log(b); // Original "spam" function
console.log(b()); // 'I am spam'
or create an implicit global variable that shadows the function spam?
它只是为垃圾邮件分配了一个新值。原始函数对象仍然存在,但如果没有其他引用,它可用于垃圾回收。
在JavaScript中我们可以声明一个函数然后赋值给它,如下:
function spam() { return "spam 'n eggs"; }
spam = spam();
spam(); // TypeError: spam is not a function.
此代码是否会更改名为 spam 的全局变量的值,或者创建一个隐藏函数 spam 的隐式全局变量?
它不会覆盖函数,但会为该变量分配一个字符串。第一行定义的函数 return 是一个字符串,因为第二行设置 spam
等于 return 值(因为函数被调用(注意括号))所以垃圾邮件是string.
在浏览器控制台试试这个:window.spam
。在第一行之后,它应该显示该功能。然后在第二行之后它应该显示该字符串。
function spam() {
return "spam 'n eggs";
}
console.log('typeof spam: ',typeof spam, 'typeof window.spam: ',typeof window.spam);
spam = spam(); //spam is assigned a string
console.log('typeof spam: ',typeof spam, 'typeof window.spam: ',typeof window.spam);
spam(); // TypeError: spam is not a function.
如果我们将该代码移到一个函数中,var 关键字可用于局部范围:
function assignSpam() {
var spam = function() { return "spam 'n eggs"; }
console.log('typeof spam after initial assignment: ',typeof spam);
spam = spam(); //spam is assigned a string
console.log('typeof spam after assigning to spam(): ',typeof spam);
spam(); // TypeError: spam is not a function.
}
assignSpam();
spam; //undefined
服务器端的结果应该相似javascript(例如 NodeJS)。
Does this code overwrite the function held by a global variable called spam,
没有。分配给 spam 的初始值是对该函数的引用。分配一个新值不会改变函数,它只是将一个新值分配给 spam.
例如
function spam(){return 'I am spam';}
var b = spam;
spam = spam();
console.log(spam) // 'I am spam'
console.log(b); // Original "spam" function
console.log(b()); // 'I am spam'
or create an implicit global variable that shadows the function spam?
它只是为垃圾邮件分配了一个新值。原始函数对象仍然存在,但如果没有其他引用,它可用于垃圾回收。