[JavaScript,ES6]函数声明提升和预解析的总结和试验
来源:互联网 发布:网络防御技术 编辑:程序博客网 时间:2024/06/03 19:38
1. 变量的声明被提前到作用域顶部,赋值保留在原地
2. 函数声明整个“被提前” (且后面不再重新“赋值”)
3. 函数表达式时,只有变量“被提前”了,函数没有“被提前”
首先还是都会提升(函数声明整个“被提前”,且后面不再重新“赋值”),但是编译器在遇到变量声明时,如果发现已经有同名的声明了,就忽略执行这一条声明。
6.全局作用域下,不带var声明变量,相当于window对象的属性值名,不会提升,带var则是全局变量,会提升。
7.不管条件是否成立,都要把带var的进行提前的声明.——if(false){//带var的变量}
8.立即执行函数定义的function在全局作用域下不进行预解析,当代码执行到这个位置的时候,定义和执行一起完成了。
2. 函数声明整个“被提前” (且后面不再重新“赋值”)
3. 函数表达式时,只有变量“被提前”了,函数没有“被提前”
4. 在块中定义的函数声明或函数表达式:
ES6:会把函数声明当作带var的函数表达式,把函数变量提升到全局作用域或函数作用域的头部;也会把整个函 数声明提升到本块级的头部。
ES5:会把整个函数声明提升到全局作用域或函数作用域的头部。
//不要在块中声明函数。
首先还是都会提升(函数声明整个“被提前”,且后面不再重新“赋值”),但是编译器在遇到变量声明时,如果发现已经有同名的声明了,就忽略执行这一条声明。
6.全局作用域下,不带var声明变量,相当于window对象的属性值名,不会提升,带var则是全局变量,会提升。
7.不管条件是否成立,都要把带var的进行提前的声明.——if(false){//带var的变量}
8.立即执行函数定义的function在全局作用域下不进行预解析,当代码执行到这个位置的时候,定义和执行一起完成了。
9.函数体内return之后的代码,该预解析的依然会进行预解析。
—— ES6没有变量提升
请看以下代码的:
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>变量提升发生重名的情况</title><style type="text/css"> </style></head><body><script>(function () {var a = 12;console.log(a); //12function a() {};console.log(a); //12a = 'aaa';console.log(a);//'aaa'})()//相当于(function () {//变量提升var a;function a() {}; //编译时忽略var a; //编译时忽略//变量赋值a = 12;//执行console.log(a); //12 console.log(a); //12//变量赋值a = 'aaa';//执行console.log(a); //'aaa'})()(function () {var fn = 13; var fn = function () { console.log('ok'); } fn(); //ok})()//相当于(function () {//变量提升var fn;var fn; //编译时忽略//变量赋值,函数表达式只提升了声明部分,还会再赋值fn = 13;fn = function () { console.log('ok'); }//执行fn(); // ok })()(function () {var fn = 13; function fn() { console.log('ok'); } fn(); //fn in not a function})()//相当于(function () {//变量提升var fn;fn = function () { console.log('ok'); } //编译时忽略//变量赋值,函数声明已全部提升,不再赋值 fn = 13;fn(); //fn in not a function })()</script></body></html>
阅读全文
0 0
- [JavaScript,ES6]函数声明提升和预解析的总结和试验
- javascript的变量声明和函数声明提升
- javascript的变量声明和函数声明提升
- 13 JavaScript基础之--变量声明提升和预解析
- JavaScript中变量和函数声明的提升
- JavaScript 代码预解析/变量和函数的声明
- javascript中的变量提升和函数声明提升
- 变量声明提升和函数声明提升
- 变量和函数声明提升
- 你不知道的JavaScript--Item6 var预解析与函数声明提升(hoist )
- 你不知道的JavaScript--Item6 var预解析与函数声明提升(hoist )
- 深入理解变量声明提升和函数声明提升
- 深入理解变量声明提升和函数声明提升
- 深入理解变量声明提升和函数声明提升
- Js 变量声明提升和函数声明提升
- JS函数声明提升和变量声明提升
- JS中的函数声明提升和变量声明提升
- 深入理解变量声明提升和函数声明提升
- Ubuntu16.04 下安装和卸载Google Chrome
- 文章标题
- 【2017.12.9】8.String to Integer(atoi) 字符串到整数
- 求两个整数的最小公倍数与最大公约数
- 10.消息总线(bus+rabbitmq)
- [JavaScript,ES6]函数声明提升和预解析的总结和试验
- Qt加密source
- ubuntu 16.04安装mysql-server_5.7.xx
- 飞跃原野sdut1124
- 剑指offer 求1+2+3+..+n
- Struts2中<s:iterator>基本用法及示例
- 使用java打开本地文件的方法
- Android函数响应式编程——必学的RxJava变换操作符map、flatMap、cast、concatMap、flatMapIterable、buffer、groupBy
- 组合查询(Union)