我偶然发现了有关提升https://jsfiddle.net/phusick/h4bh2m4y/的jsfiddle代码示例
fn1('hello');
fn2('world');
function fn1(message) {
console.log('mgs1:', message);
}
var fn2 = function(message) {
console.log('msg2:', message);
}
令人惊讶的是,它不起作用:
未捕获的TypeError:fn2不是函数
该程序有错误吗?
最佳答案
您的代码与此等效:
// function declarations are hoisted
function fn1(message) {
console.log('mgs1:', message);
}
// variable declarations are hoisted
var fn2;
fn1('hello');
fn2('world');
// assignments to a variable are not hoisted
fn2 = function(message) {
console.log('msg2:', message);
}
fn1
函数的声明被提升。fn2
变量的声明被悬挂。fn2
变量的分配未取消。声明被吊起,赋值或初始化不被吊起。
像使用
fn2
一样进行的函数分配与诸如fn1
这样的函数声明不同。不会使用var
分配对变量的赋值,只保留变量本身的定义。因此,在您尝试调用fn2('world')
时,fn2
仍然是undefined
。关于javascript - 吊装不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38825313/