前言let与var最大的区别就是var会变量提升、var会被覆盖、var变量没有块级作用域,而let都将弥补这些bug。传统语言都不会有‘变量提升、重复声明被覆盖、变量没有块级作用’这些问题,这是js的bug(js说这锅我不背,这是es6出的标准,我只是实现它)js里边只有全局作用域和函数作用域而传 ...
分类:
其他好文 时间:
2017-09-21 14:47:53
阅读次数:
157
在写javascript代码的时候,经常会碰到一些奇怪的问题,例如: 对于为什么会是这样的一个结果:function number function 很多人可能会抱着一种疑问的态度,为什么不是 undefined function function ? 在上面的代码中其实就涉及到了变量提升与函数提升 ...
分类:
编程语言 时间:
2017-09-21 13:24:06
阅读次数:
107
本文是学习廖雪峰老师js教程的笔记摘录 JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部: 虽然是strict模式,但语句var x = 'Hello, ' + y;并不报错,原因是变量y在稍后申明了。但是alert显示Hello, undefi ...
分类:
其他好文 时间:
2017-09-20 12:05:21
阅读次数:
94
一、变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。上个简历的例子如: 1 2 3 4 5 6 7 8 9 10 console.log(global); // unde ...
分类:
Web程序 时间:
2017-09-16 20:52:08
阅读次数:
272
预编译当js引擎解析的时候,它会在预编译对所有声明的变量和函数进行处理。 变量提升 console.log(a); // undefinedvar a = 1;console.log(a); // 1预解析函数 f(); // 1function f() { console.log(1);};详细: ...
分类:
Web程序 时间:
2017-09-15 20:17:53
阅读次数:
159
let: 1、块级作用域内有效 2、不存在变量提升 3、暂时性死区 下面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错 ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的 ...
分类:
Web程序 时间:
2017-09-13 11:55:50
阅读次数:
596
1 变量提升 JavaScript会将所有变量和函数声明移动到它的作用域的最前面,这就是所谓的变量提升(Hoisting)。也就是说,无论你在什么地方声明变量和函数,解释器都会将它们移动到作用域的最前面。因此我们可以先使用变量和函数,而后声明它们。 但是,仅仅是变量声明被提升了,而变量赋值不会被提升 ...
分类:
Web程序 时间:
2017-09-11 21:17:28
阅读次数:
259
首先需要明确的是let、const、var都是用来定义变量的 在ES6之前,我们一般都用var来定义变量,例如 : 在上面的代码中,我们可以预计到第一个console输出的是1,第二个由于变量提升输出的是undefine,而不是产生ReferenceError错误,第三个输出的还是1;也就是说在函数 ...
分类:
其他好文 时间:
2017-09-10 12:41:17
阅读次数:
141
今天遇到一道笔试题,题目是这样的 直接粘贴到浏览器运行会报错 奇怪了,按理说,就算外部g被覆盖,function的声明方式也应该是提升并立即赋值的,我决定重新梳理一下这方面的知识 二、实验 如果我们给if中的foo加上var关键字 说明IE11之后(至多在firefox55,chorme60之后), ...
分类:
其他好文 时间:
2017-09-10 12:32:26
阅读次数:
249
什么是变量?什么是变量提升? var 和 let 1,当为内存的某个区域指定一个有意义的标识符时,该标识符就叫做变量,这样,在编写代码时,我们就不必关心变量所表示的内存的实际位置了。变量所代表的是某个内存区域,存储在这个内存区域的数据在程序运行时是可以改变的。也就是说变量的取值在程序运行时是可以改变 ...
分类:
Web程序 时间:
2017-09-09 21:39:51
阅读次数:
234