JavaScript闭包和名称闭包
内部函数中定义的变量与外部函数中的变量具有相同的名称,是否与外部变量隔离JavaScript闭包和名称闭包,javascript,namespaces,scope,closures,Javascript,Namespaces,Scope,Closures,内部函数中定义的变量与外部函数中的变量具有相同的名称,是否与外部变量隔离 function() { var myTest = "hi there"; ( function( myTest ) { myTest = "goodbye!"; } )(); console.log( myTest ); // myTest should still be "hi there" here, correct? } 很自然,如果我没有在内部函数中声明myTes
function() {
var myTest = "hi there";
( function( myTest ) {
myTest = "goodbye!";
} )();
console.log( myTest ); // myTest should still be "hi there" here, correct?
}
很自然,如果我没有在内部函数中声明
myTest
,它将创建一个闭包并修改原始函数。我只是想确保在内部函数中声明的变量始终与该函数隔离,即使它们的名称可能与外部作用域冲突。是的,它们实际上是隔离的。每个函数都创建一个新的作用域,并且声明所请求变量的最近的作用域始终优先。没有例外。只是为了完整起见。在这些非常相似的例子中,这里是没有参数的情况
var x = 'a';
( function( ) { //note that there is no parameter here
x = 'b';
alert('inner:'+x); //b
} )();
alert('outer:'+x); //b
和一个同名的var
var x = 'a';
( function( ) {
var x = 'b';
alert('inner:'+x); //b
} )();
alert('outer:'+x); //a
@柴伊:是的,对不起。我的话有点混淆了。这个方法也避免了范围查找。