1.变量提升:(创建->初始化)-->赋值-->修改 就是说,以var声明的变量,它的声明会被提升到当前作用域的顶端(注意是变量声明提升,变量的赋值没有提升) //在if语句中也会提升,跟js的解析顺序有关   <script>     console.log(a);//undefined     var a = 10;     function test(){       console.log(a);//undefined       if(false){        …
    关于变量提升,以前在一些教程和书籍上都听到过,平时开发中也知道有这个规律,但是今天突然在一个公开课中听到时,第一反应时一脸懵逼,然后一百度,瞬间觉得好熟悉啊,差点被这个概念给唬住了,不信我给你看个栗子,你也会恍然大悟的: (function(){ console.log(v); var v = 'I love you'; console.log(v); })() // undefined I love you     这就是一个典型的变量提升的例子了,规则是怎样的呢,我的理解是在一个作用…
上篇文章中讲到变量提升和函数提升的先后顺序时蒙了,后来去查了一下资料,特别整理一下. 在<你不知道的JavaScript(上卷)>一书的第40页中写到:函数会首先被提升,然后才是变量. 书中的一个代码示例是: foo(); //1 var foo; function foo() { console.log(1); } foo = function() { console.log(2); } 这个例子相对比较好理解,就是foo这个函数会先被声明再作用域的开始部分,实际上这个代码片段会被引擎理解为…
ES6)新增加了两个重要的 JavaScript 关键字:let 和 const.以前声明变量时只有一种方式:var,ES6对声明方式进行了扩展,现在可以有三种声明方式了. 1.var:variable的简写,字面意思就是变量. 2.let:let的意思(vt. 允许,让:出租:假设:妨碍:vi. 出租:被承包:n. 障碍:出租屋) 我理解为出租屋.临时的意思.一种临时变量声明方式,既然是临时变量,则该变量的定义.激活以及作用区域也就只在 let 命令所在的代码块内有效. 3.const:常量.…
1.var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) const和let的异同点 相同点:const和let都是在当前块内有效,执行到块外会被销毁,也不存在变量提升(TDZ),不能重复声明. 不同点:const不能再赋值,let声明的变量可以重复赋值. 2.字符串 引用模板字面量进行字符串拼接 可以抛弃以前字符串 + 的操作了. const template…
1.一些历史 ES6(ECMAScript 6.0)是 JavaScript 语言的新一代标准,于2015 年 6 月正式发布,距今已经4年了,它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言. 而我们现在所广泛使用的ES5版的JavaScript其实是ECMAScript 3.1改名的,因为ES4未通过审核,挂了.ES6于2000年开始积累,15年后正式发布,是一个历史性的重大变革. 支持ES6的浏览器据说已经超过90%,当然Node的支持最好,所…
你知道下面的JavaScript代码执行时会输出什么吗? var foo = 1; function bar() { if (!foo) { var foo = 10; } console.log(foo); } bar(); 答案是“10”,吃惊吗?那么下面的可能会真的让你大吃一惊: var a = 1; function b() { a = 10; return; function a() {} } b(); console.log(a); 答案是 “1”.为什么会这样呢,这就涉及到 JS…
1.let和var类似, (1)let与var不同的点:let没有预编译,变量提升这个过程,let声明的变量只能在当前作用域内访问到(一个{}可以看做是一个作用域),在全局var声明的变量属于window,而let声明的不属于 let a = 12; (function () { console.log(a); let a = 5; }()); 可见上面代码中是会报错的,如果a是var声明的,那么就不会报错.输出a的值是undefined (2)虽然说let声明的变量不允许重复声明,但是在for…
一.let 1.看下代码,在函数中无论在哪里声明变量,都会自动提到函数顶部,这就是函数变量提升,它的作用于为当前函数中. function aa() { if(bool) { var test = 'hello man' } else { console.log(test) } } 浏览器解析时 function aa() { var test // 变量提升 if(bool) { test = 'hello man' } else { //此处访问test 值为undefined consol…
[系统学习ES6] 本专题旨在对ES6的常用技术点进行系统性梳理,帮助大家对其有更好的掌握.计划每周更新1-2篇,希望大家有所收获. 以前用ES5时,声明变量只能用var.ES6的出现,为我们带来了两种新的声明方式:let和const.我们可以先简单记忆: var:声明全局变量 let:声明局部变量 const:声明常量 var声明 var在ES6里是用来声明全局变量的,我们先看一个简单的例子: var a = "lemoncool";console.log(a); 控制台输出了&qu…