关于JavaScript的作用域,最近听到一个名词:“词法作用域”;以前没有听说过(读书少),记录一下对此的理解,加深印象。 词法作用域:在JavaScript中,一个函数的作用域,在这个函数定义好的时候就决定好了;因此判断该函数的上一级作用域,不是看函数在哪里调用,而是看函数在哪里编写;请勿和th ...
分类:
编程语言 时间:
2018-07-19 14:49:10
阅读次数:
200
先来看一段代码: 最开始我觉得这道题简直是送分题啊,很明显结果为,y=1;x=1 然后当我在控制台输出以后,感觉一记响亮的耳光,输出结果: 结论:上面的结果是因为变量提升和连等赋值造成的。 分析:上面的 var x=y=1 容易理解为var x=y,var y=1; 因为这里使用了连等赋值,连等操作 ...
分类:
Web程序 时间:
2018-07-17 21:11:27
阅读次数:
205
1. const and let 除了函数作用域之外,增加了块级作用域和常量。const 定义的绑定不可以修改,let定义的绑定在{ }不能访问。之前的 var 如果不在函数作用域内,相当于定义了一个全局变量,并且有变量提升(将变量的声明提升至所在函数的最前面)。 2. 数组函数 新增了一些数组处理 ...
分类:
其他好文 时间:
2018-07-15 19:48:17
阅读次数:
173
微信小程序视图层WXS_小程序变量 微信小程序变量的概念 WXS 中的变量均为值的引用。 没有声明的变量直接赋值使用,会被定义为全局变量。 如果只声明变量而不赋值,则默认值为 undefined。 var表现与javascript一致,会有变量提升。 上面代码,分别声明了 foo、 bar、 i 三 ...
分类:
微信 时间:
2018-07-05 19:43:42
阅读次数:
250
1、 词法作用域 词法作用域就是定义在词法阶段的作用域,换句话说,也就是js的作用域时在定义阶段决定的,和调用无关。 1.1 作用域沿着作用链向上查找 1.2 函数作用域,定义函数时,会创建自己的气泡(作用域),外部作用无法直接访问。 1.3 立即执行函数 IIFE(Immediately Invo ...
分类:
编程语言 时间:
2018-07-04 20:07:03
阅读次数:
142
1.let和var类似, (1)let与var不同的let没有预编译,变量提升这个过程,let声明的变量只能在当前作用域内访问到(一个{}可以看做是一个作用域) 可见上面代码中是会报错的,如果a是var声明的,那么就不会报错、输出a的值是undefined (2)虽然说let声明的变量不允许重复声明 ...
分类:
其他好文 时间:
2018-06-30 15:00:38
阅读次数:
160
原理:JS引擎的工作方式是①先解析代码,获取所有被声明的变量;②然后在运行。也就是专业来说是分为预处理和执行两个阶段。 变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升。 例如: 以上语句并不会报错,只是提示undefined。实际在js引擎中的运行过程是: 实际运行表示变量a ...
分类:
其他好文 时间:
2018-06-26 20:48:02
阅读次数:
186
变量作用域 由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,如果内部函数定义的变量和外部函数定义的变量相同,则内部函数的变量将“屏蔽”外部函数的变量 变量提升 function foo() { var x = 'Hello, ' + y; console.log(x ...
分类:
其他好文 时间:
2018-06-23 01:26:05
阅读次数:
143
ES6必备知识 1.变量声明const和let 在ES6之前,我们都是用var关键字声明变量。无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部)。这就是函数变量提升例如: function aa() { if(bool) { var test = 'hello man' ...
分类:
其他好文 时间:
2018-06-19 16:31:30
阅读次数:
190
这篇文章仅仅针对C语言存在的隐式类型转换做一些分析,关于C++的这方面研究,有时间我再另外写一篇文章。 关于隐式类型转换,是指发生在没有明确说明的情况下(C语言风格的强制类型转换就是属于我们程序员有明确说明的),编译器自动帮我们执行的类型转换。 通常同类型的数据进行运算、比较和赋值的时候我们是不需要 ...
分类:
其他好文 时间:
2018-06-15 01:03:22
阅读次数:
166