我偶然发现了有关提升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/

10-09 09:07