因为回调的行为就好像它们实际上被放置在一个函数中一样,它们实际上是闭包:它们可以访问包含函数的变量和参数,甚至是全局范围内的变量 link .正确的?但如果我这样做:
function fullName(firstName, lastName, callback){
var f_scope = "X";
console.log("My name is " + firstName + " " + lastName);
callback(lastName);
}
var greeting = function(ln){
console.log('Welcome Mr. ' + ln);
console.log(f_scope);//<<---error
};
fullName("Jackie", "Chan", greeting);
另一方面,如果 greeting
在 fullName
中,则不会发生错误。那么回调不是 100% 像放在函数内部一样吗?正确的?
最佳答案
they can access the containing function’s variables and parameters
词汇上包含。他们可以访问函数定义范围内的变量,而不是函数调用范围内的变量。 JS 中的函数做形式 lexical closures ,没有没有dynamic scoping .
f_scope
变量既不是全局变量,也不是在包含 greeting
的函数中声明的。
关于javascript - 闭包 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34191573/