Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用生命来避免名字冲突?_Javascript - Fatal编程技术网

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是一种反模式。执行此操作时,
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是一种反模式。执行此操作时,
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不是