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

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

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

引擎在读取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);

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


什么是解构赋值?

解构赋值给我们一种新的变量赋值方式,主要可以利用数组解构赋值和对象解构赋值。它的用途包括:交换变量值,提取函数返回值,函数参数定义,默认值设定等等,给我们编程带来便利。

ES5中的私有变量

严格来讲,JavaScript中没有私有成员的概念;所有对象属性都是公有的。不过,倒是有一个私有变量的概念。任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量

vue定义全局变量

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

ES5中的静态私有变量

通过在私有作用域中定义私有变量或函数,同样也可以创建特权方法,基本模式如下:这个模式创建了一个私有作用域,并在其中封装了一个构造函数及相应的方法。在私有作用域中,首先定义了私有变量和私有函数

揭秘Js变量提升

变量提升是一个陈旧且令人困惑的术语。甚至在 ES6之前:变量提升的意思究竟是“提升至当前作用域顶部”还是“从嵌套的代码块中提升到最近的函数或脚本作用域中”?还是两者都有?

php中的$_REQUEST超全局变量

PHP $_REQUEST是用于收集HTML表单提交的数据,PHP $_REQUEST属于PHP的超级全局变量。以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)

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

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

JS关于全局变量的问题

全局变量就是在任何函数外面声明的或是未声明直接简单使用的,全局对象有个附加属性叫做window,此window(通常)指向该全局对象本身,使用过多的全局变量会造成代码可读性降低,全局变量所占内存较大

CSS:var变量的局部作用域(继承)特性

CSS变量非全局:最近做项目,发现CSS变量一个有意思的特性,那就是变量作用域非全局。举个例子,如下HTML和CSS:CSS也越来越具有动态特性了

Node常用的全局变量与 Inspect 调试

在 Node 中常用的全局方法有 CommonJS、Buffer、process、console、timer 等,这些方法不需要 require引入 API 就可以直接使用。如果希望有属性或方法可以“全局使用”,那就将它挂载在 Node 的global对象上:

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

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全