Javascript 用生命来避免名字冲突?
Javascript 用生命来避免名字冲突?,javascript,Javascript,(函数(){ 变量a=b=3; })(); (功能(){ 变量a=b=5; })(); 控制台日志(b) console.log(a)行 var a = b = 3; 首先考虑 b = 3 它将3赋值给(隐式全局)变量“b”。此赋值表达式的计算结果为3,因此 var a = b = 3; 然后变成 var a = 3; a前面的var表示变量名a仅在包含函数中定义-它不会泄漏到全局范围。你用过吗 a = b = 3; 然后,像b,a也将被隐式分配给全局对象 您可能希望确保每个IIFE都
(函数(){
变量a=b=3;
})();
(功能(){
变量a=b=5;
})();
控制台日志(b)
console.log(a)
行
var a = b = 3;
首先考虑
b = 3
它将3
赋值给(隐式全局)变量“b”。此赋值表达式的计算结果为3
,因此
var a = b = 3;
然后变成
var a = 3;
a
前面的var
表示变量名a
仅在包含函数中定义-它不会泄漏到全局范围。你用过吗
a = b = 3;
然后,像b
,a
也将被隐式分配给全局对象
您可能希望确保每个IIFE都有一个单独的b
绑定,这可以通过使用var
首先声明b
来完成:
(函数(){
var b;
变量a=b=3;
})();
(功能(){
var b;
变量a=b=5;
})();
//这里既不定义a也不定义b
控制台日志(b)
console.log(a)
行
var a = b = 3;
首先考虑
b = 3
它将3
赋值给(隐式全局)变量“b”。此赋值表达式的计算结果为3
,因此
var a = b = 3;
然后变成
var a = 3;
a
前面的var
表示变量名a
仅在包含函数中定义-它不会泄漏到全局范围。你用过吗
a = b = 3;
然后,像b
,a
也将被隐式分配给全局对象
您可能希望确保每个IIFE都有一个单独的b
绑定,这可以通过使用var
首先声明b
来完成:
(函数(){
var b;
变量a=b=3;
})();
(功能(){
var b;
变量a=b=5;
})();
//这里既不定义a也不定义b
控制台日志(b)
console.log(a)
var a=b=3正是出于这个原因,code>是一种反模式。执行此操作时,b
从不使用var
声明。这相当于:
b = 3 // no var makes b global
var a = b; // var a is scoped to enclosing function
这将b
置于全局命名空间中,这可能不是您想要的
功能测试(){
var a=b=3;//b‘看起来’像是函数作用域……但是
}
测试()
console.log(b)//b是全局的,即使在函数中定义了var a=b=3正是出于这个原因,code>是一种反模式。执行此操作时,b
从不使用var
声明。这相当于:
b = 3 // no var makes b global
var a = b; // var a is scoped to enclosing function
这将b
置于全局命名空间中,这可能不是您想要的
功能测试(){
var a=b=3;//b‘看起来’像是函数作用域……但是
}
测试()
console.log(b)//b是全局变量,即使在函数中定义了
在不分配变量的情况下分配变量
var
会创建一个“自动全局变量”
这就是为什么a是未定义的,而b不是分配一个变量而不分配变量
var
会创建一个“自动全局变量”
这就是为什么a是未定义的,而b不是