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代码执行时会输出什么吗? 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…