全局变量和函数的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。第二人生