全局变量和函数的javascript调用
我想知道吊装的事。我知道如果全局函数名和全局变量相同,函数会覆盖变量名。是这样吗 这是我的密码全局变量和函数的javascript调用,javascript,hoisting,Javascript,Hoisting,我想知道吊装的事。我知道如果全局函数名和全局变量相同,函数会覆盖变量名。是这样吗 这是我的密码 (函数(){ console.log('console.log#1'+globalString);//globalString函数 })(); var globalString='I'm globalString variable'; (功能(){ console.log('console.log#2'+globalString);//字符串 })(); 函数globalString(){ log(
(函数(){
console.log('console.log#1'+globalString);//globalString函数
})();
var globalString='I'm globalString variable';
(功能(){
console.log('console.log#2'+globalString);//字符串
})();
函数globalString(){
log('I'm globalString function');
}
函数声明(如您的globalString()
)被挂起。对于解释器,您的代码如下所示:
var globalString=函数globalString(){
log('I'm globalString function');
};
(功能(){
console.log('console.log#1'+globalString);//globalString函数
})();
globalString='我是globalString变量';
(功能(){
console.log('console.log#2'+globalString);//字符串
})();代码>函数声明(如您的globalString()
)被挂起。对于解释器,您的代码如下所示:
var globalString=函数globalString(){
log('I'm globalString function');
};
(功能(){
console.log('console.log#1'+globalString);//globalString函数
})();
globalString='我是globalString变量';
(功能(){
console.log('console.log#2'+globalString);//字符串
})();代码>函数移到了顶部,所以当控制台.log#1
运行时,它仍然是一个函数。然后用字符串值覆盖它。只挂起声明,不挂起分配。函数移到顶部,因此在console.log#1
运行时,它仍然是一个函数。然后用字符串值覆盖它。只挂起声明,不挂起赋值。从技术上讲,它不是var globalString代码>,函数globalString()…
,代码的其余部分?我不确定,因为这是一个函数声明,不是一个正常的提升“var”。无论如何,不管它看起来像什么,都不会对结果产生任何影响。你描述的结果当然是正确的,但我相信事件的“解释”顺序是:1。声明globalString 2。声明func globalString(覆盖以前未定义的变量)3。第一人生4。将字符串分配给globalString(覆盖函数声明)4。第二,从技术上讲,它不是var globalString代码>,函数globalString()…
,代码的其余部分?我不确定,因为这是一个函数声明,不是一个正常的提升“var”。无论如何,不管它看起来像什么,都不会对结果产生任何影响。你描述的结果当然是正确的,但我相信事件的“解释”顺序是:1。声明globalString 2。声明func globalString(覆盖以前未定义的变量)3。第一人生4。将字符串分配给globalString(覆盖函数声明)4。第二人生