javascript函数提升

clipboard.png
这个声明了一函数 会不会提升 但是我提到最前面还是可以执行啊 求解

阅读 2.2k
3 个回答

针对函数,分函数声明函数表达式两种,这两种的提升方式不同:

函数声明

hello("Tom"); // 输出: Hello Tom

function hello(name) {
  console.log(`Hello ${name}`);
}

提升后,就等同于:

function hello(name) {
  console.log(`Hello ${name}`);
}

hello("Tom");

函数表达式

hello("Tom"); // 报错

var hello = function (name) {
  console.log(`Hello ${name}`);
}

hello("Jimmy"); // 输出: Hello Jimmy

提升后,等同于:

var hello;

hello("Tom");

hello = function (name) {
  console.log(`Hello ${name}`);
}

hello("Jimmy");

找到一个文档,讲的也不多,在这里

非严格模式中,是函数声明就会提升到当前作用域的最上面。

var a = function(){
    alert(2);
}

这么就不会了,因为这不是函数声明,var a会被提升(变量声明提升),后面的赋值还在当前执行。

在同一作用域中会提升,{}里边,也就是在window.onload里会提升,而在这个方法外面是不能访问a的。

window.onload=function(){ // 在这个{}以内都可以访问
  a();    //可以访问
  function a(){console.log(1)}
}       
a();// 不可以访问
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题