1:局部变量的优先级要高于同名的全局变量 2:函数声明提前 你可能会误认为函数中的第一行会输出“global”,因为代码还没有执行到var语句声明局部变量的地方。其实不然,由于函数作用域的特性,局部变量在整个函数体始终是有定义的,也就是谁,在函数体内局部变量遮盖了同名全局变量。尽管如此,只有在程序执 ...
分类:
其他好文 时间:
2017-09-24 12:40:50
阅读次数:
171
ES5中只有全局作用域和函数作用域,没有块级作用域的概念,而ES6中引入了块级作用域的概念。 ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。 但是,浏览器没有遵守这个规定,为了兼容以前的旧代码,还是支持在块级作用域之中声明函数,因此上面两种情况实际都能运行,不会报错。 ...
分类:
其他好文 时间:
2017-09-21 20:55:14
阅读次数:
114
前言let与var最大的区别就是var会变量提升、var会被覆盖、var变量没有块级作用域,而let都将弥补这些bug。传统语言都不会有‘变量提升、重复声明被覆盖、变量没有块级作用’这些问题,这是js的bug(js说这锅我不背,这是es6出的标准,我只是实现它)js里边只有全局作用域和函数作用域而传 ...
分类:
其他好文 时间:
2017-09-21 14:47:53
阅读次数:
157
在es6中let和const声明的变量都只能在其声明的块级作用域中使用,所谓的块级作用域就是{}这么一对大括号。 为什么需要块级作用域? ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。 第一种场景,内层变量可能会覆盖外层变量。 上面代码的原意是,if代码块的外部使用外层 ...
分类:
其他好文 时间:
2017-09-17 00:33:00
阅读次数:
146
一、变量提升 在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中变量没有块级作用域,但是有函数作用域,即只有函数可以约数变量的作用域。 并且,函数的实质也是一个变量,所以可以改变它的值,即赋值。所以变量名提升和函数名提升非常相像。 1.变量名的提升发生在函数内部。看下面的例子。说明:第一个因为弹出undefined,相当于在上面定义了var num; ...
分类:
Web程序 时间:
2017-09-15 22:32:05
阅读次数:
177
来源:JS的函数定义方式以及对声明的提前 以下代码,声明语句会被提前到当前作用域(全局作用域和函数作用域)的顶部。但赋值语句不会提前,依然留在原地 而函数的声明也会提前到作用域的顶部 对以上的总结就是:只要是声明(变量声明或函数声明)就会被提前,但赋值语句不会被提前 以下代码中的y所在的环境,是全局 ...
分类:
Web程序 时间:
2017-09-15 21:01:03
阅读次数:
159
this指向函数作用域,对也错 function foo(){ var a=2; this.bar();//this 指向window}function bar(){ console.log(this.a);//指向window } foo(); //RegereceError: a is not ...
分类:
其他好文 时间:
2017-09-15 18:58:51
阅读次数:
100
嵌套函数 Python语言允许在定义函数的时候,其函数体内又包含另外一个函数的完整定义,这就是我们通常所说的嵌套定义; 实例1: def foo(): m=3 def bar(): n=4 print m+n return bar() 嵌套函数作用域问题 Python中一个与众不同的语法就是可以嵌套 ...
分类:
其他好文 时间:
2017-09-15 02:11:18
阅读次数:
185
作用域1. 全局作用域2. 函数作用域这里扯出来下js的函数声明和变量声明提升,直接来两段代码 嗯,为什么呢?因为var声明的变量会变量声明提升,所以相当于执行if判断的时候a变量已经声明过了,而此时a是一个全局变量既是window对象的一个属性,所以这里压根没有进if判断,所以这里打印出来的是un ...
分类:
Web程序 时间:
2017-09-11 21:26:40
阅读次数:
237