使用var 定义变量还会提升变量声明,即使用var定义:function hh(){ console.log(a); var a = 'hello world';}hh() //undefined不使用var定义:function hh(){ console.log(a); a = 'hello w ...
分类:
其他好文 时间:
2016-11-01 18:29:54
阅读次数:
169
很多语言中都有块级作用域,但JS没有,它使用var声明变量,以function来划分作用域,大括号“{}” 却限定不了var的作用域。用var声明的变量具有变量提升(declaration hoisting)的效果。 ES6里增加了一个let,可以在{}, if, for里声明。用法同var,但作用 ...
分类:
其他好文 时间:
2016-10-27 13:06:23
阅读次数:
261
全局中的解析和执行过程 预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处理阶段的词法环境中去。 一、全局环境中如何理解预处理 比如说下面的这段代码: 在预处理时它创建的词法作用域可以这样表示: ...
分类:
Web程序 时间:
2016-10-20 07:18:39
阅读次数:
262
1)应用场景系统如果被黑客攻入,他就可以查看一下histroy就能知道了系统的一些敏感信息,像登录的密码之类的:比如有马虎的维护工程师,直接输入了数据库的密码:[root@mysql-master~]#history
16history
17clear
18mysql-uroot-p‘redhat12345‘-S/data/3306/mysql.sock
19hist..
分类:
其他好文 时间:
2016-10-18 23:44:30
阅读次数:
358
第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升。这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下。 今天主要介绍以下几点: 1. 变量提升 2. 函数提升 3. 为什么要进行提升 4. 最佳实践 那么,我们就开始进入主题吧。 1. 变量提升 通常J ...
分类:
编程语言 时间:
2016-10-18 09:30:22
阅读次数:
276
这是我申请博客园写的第一篇文章,想把这两天学习的关于js的变量和函数提升机制(hoisting)记录下来。 从网上看到这么一段代码: var c = 2; function c(){ c = 22; console.log("c="+c); } c();//会报错,变量提升机制导致的(c is no ...
分类:
Web程序 时间:
2016-10-11 11:41:28
阅读次数:
171
一.let,const 1.因为块级的作用域,这样打印01234,循环外打印i会报错 用es6以后,可以用块级作用域代替闭包 2.不存在变量提升 一个大括号就是一个作用域,let tmp使该作用域绑定了tmp,let前赋值就报错。 3.不能重复声明 4.块级作用域内声明的函数类似于let,对作用域之 ...
分类:
其他好文 时间:
2016-10-09 13:58:45
阅读次数:
261
废话不说,直接上代码(这是在JavaScript面对对象编程指南上面看到的一个例子) 书上的解释是这样的:当JavaScript执行过程进入新函数时,这个函数内被声明的所有变量都会被移动导到函数最开始的地方。这种现象叫做提升。且被提升的只有变量的声明。 上面这个例子可以等价于: 书上只是把它当做一个 ...
分类:
编程语言 时间:
2016-10-05 07:12:33
阅读次数:
178
JS代码从编译到执行 我们写出一段JS代码,JS的引擎并不是按照我们书写的顺序从上到下顺序编译并且执行的,首先是按照自己的规则对我们的代码先进行编译,然后从上到下执行编译的代码。 在全局作用域中,JS首先会对我们的函数进行声明,然后就是我们经常听到的变量提升机制,然后才是按照我们书写代码的顺序,来进 ...
分类:
Web程序 时间:
2016-09-27 06:54:33
阅读次数:
146
1.let和const 1.1 ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 1.2 let不像var那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。 1.3 只要块级作用域内存在let命令,它所声明的变量就“绑 ...
分类:
其他好文 时间:
2016-09-25 14:34:54
阅读次数:
147