一个例子,变量提升和函数提升就是这么简单!

时间: 2019-02-11阅读: 973标签: 变量

为啥要进行变量提升和函数提升?

引擎在读取js代码的过程中,分为两步。第一个步骤是整个js代码的解析读取,第二个步骤是执行。在JS代码执行之前,浏览器的解析器在遇到 var 变量名 和function 整个函数 提升到当前作用域的最前面。


记住两句话

1.变量提升只会提升变量名的声明,而不会提升变量的赋值初始化。
2.函数提升的优先级大于变量提升的优先级,即函数提升在变量提升之上。

记住这两句话,就可以从容不迫的撸代码了!

console.log(a); 
var a=1;
console.log(a);    
function a(){console.log(2);}
console.log(a);   
var a=3;
console.log(a);    
function a(){console.log(3);}
a();
console.log(a);


你知道执行结果吗?


其实,实际的执行顺序为:

function a(){alert(3);} //第一步预解析:将 var a提升      但因为变量名与函数名相同,故function a()提升时将覆盖var a,又因为存在两个相同名称                           的function函数,后写的将覆盖先写的,所以最后提升的只有function a(){alert(3);}
 
console.log(a);     //因为函数提升,所以打印的a为函数整体
a=1;        //将1赋值给函数a,此时的a为一个变量,不再是函数
console.log(a);     //故打印的为a赋的值
console.log(a);
a=3;        //将a重新赋值3
console.log(a);     //故打印结果为3
a();        //此时的a为一个变量,不再是一个函数,所以报错,js中一旦出现报错,后面的语句将不再运行,所以最后一个console.log不进行打印。
console.log(a);

结束!搞清楚这题,变量提升与函数提升你就搞懂啦!


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1958

JS中this作用域的问题:常见报错:XXX function 或者变量 未定义

定义了全局的函数,但是使用的时候,报错XXX 函数或者变量未定义,但实际上js中明明已经定义了且正确;大多数是因为调用过程中this.functionname 或者this.varname中this指向的作用域问题

js 交换变量值的方法总汇

这篇文章总结七种办法来交换a和b的变量值 。最最最简单的办法就是使用一个临时变量了 ,最后我的方案是利用了ES6的解构赋值语法 ,它允许我们提取数组和对象的值,对变量进行赋值

javascript怎么判断变量是否存在?

javascript怎么判断变量是否存在?下面本篇文章就来给大家介绍一下使用javascript判断变量是否存在的方法,希望对大家有所帮助。

node中提供的全局变量有哪些?

JavaScript中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。在浏览器JavaScript中,通常 window 是全局对象。

Js变量提升与函数提升

函数写法:函数表达式、函数声明、Function构造函数(这种不推荐).其中函数表达式不会函数提升,函数声明会函数提升。引用类型传递的是指针,指针指向了变量存储地址.这例子里,2个b变量都指向了同一个地址,所以第一次输出5,然后下面修改了函数内部变量b的指向

js避免污染全局变量

造成污染全局变量的原因?在经典页面中,经常会有这样的引用js,上面定义的函数都是全局变量 这就造成了污染全局变量,那么这样有什么危害呢?随着项目的变大,全局变量越来越多,变量很容易覆盖。

vue定义全局变量

VUE.js 中涉及到JS全局变量:全局变量专用模块得引入、全局变量模块挂载到Vue.prototype、使用VUEX存储状态值、使用window存储变量

理解var let const区别

JavaScript中var、let、const区别?js中let和const都是es5版本新的命名规范,在此之前定定义一个变量只能用var。我们可以把let和const看做是为了弥补var的一些不足而新设计出来的

JS中的对象字面量

JS 是一种基于原型的语言,因此一切都是对象。 在对象创建,配置和访问原型时,必须提供一种易于构造的语言。定义一个对象并设置它的原型是一个常见的任务

javascript怎么使用私有变量?

任何在函数中定义的变量,就是私有变量,因为这些变量在函数外部是无法访问到的。总的来说,私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!