美文网首页
变量提升和函数表达式

变量提升和函数表达式

作者: 落花的季节 | 来源:发表于2017-06-13 14:18 被阅读16次

先让我们来看个题,测试以下我们的能力:

var getName = function () { alert (1);};
function getName() { alert (2);}

getName();

大家作出答案了吗?没做出来,不要急,下面我们就一起来分析以下。

变量声明提升

即所有声明变量或声明函数都会被提升到当前函数的顶部。

例如:

console.log(x);
var x;
x=0;

浏览器在执行的时候,js引擎会把声明语句提到最前面,如下:

var x;
console.log(x);
x=0;

函数表达式

var getNamefunction getName都是声明语句,区别在于var getName是函数表达式,而function getName是函数声明。
函数表达式最大的问题在于,会将js会将此代码分为两行执行。

例如:

console.log(x);
var x = 1;
function x(){}

实际执行的代码为,先将var x = 1拆分为var xx = 1两行,然后将var x = 1function x(){}提升至前两行。

所以最终函数声明的x覆盖了变量声明的x,log输出为x函数。

同理,上题的实际执行代码为:

var getName;//只提升变量声明
function getName(){//提升函数声明,覆盖var的声明
    alert|(2);p
}
getName = function(){//最终的赋值再次覆盖function getName声明
    alert(1);
}

getName()//1

相关文章

  • 闭包

    提升 1 变量提升 2 函数表达式 函数表达式的提升 === 变量提升 3 函数声明 demo 执行环境&词法作用...

  • 关于变量提升

    函数提升的优先级要高于变量提升,变量提升到函数声明的后面; 变量提升,但是赋值不提升,函数表达式不提升;

  • 第五章 Function类型

    简介(函数是对象) 没有重载 函数声明和函数表达式 变量提升和函数声明提升 作为值的函数 函数内部属性(calle...

  • 进阶3

    函数声明和函数表达式有什么区别 使用函数声明,如果函数被提前调用也是可以正常运行的;如果使用函数表达式,和变量提升...

  • 函数与作用域

    函数声明和函数表达式有什么区别 函数声明会提升到当前作用于执行之前;而函数表达式提升的声明是变量的声明。 函数声明...

  • js函数

    函数声明和函数表达式有什么区别 函数声明: 函数表达式: JavaScript 解释器中存在一种变量声明被提升的机...

  • 函数与作用域

    1. 函数声明和函数表达式有什么区别? 函数声明会提前,即可以在函数声明之前调用函数。而函数表达式只会将变量先提升...

  • 函数与作用域

    1.函数声明和函数表达式有什么区别 函数声明会提前,声明前置。声明不必放到调用的前面函数表达式是将声明变量提升,是...

  • 饥人谷-任务十七

    一、函数声明和函数表达式有什么区别 (*) 主要区别函数声明会有声明提升,而函数表达式的规则跟变量一样。例:源码:...

  • 你不懂的js上卷(二)

    变量提升 1.先声明 后赋值2.函数声明会被提升,函数表达式却不会3.函数声明会提升到普通变量之前 4 var a...

网友评论

      本文标题:变量提升和函数表达式

      本文链接:https://www.haomeiwen.com/subject/rrmdqxtx.html