JavaScript 变量声明提升
JavaScript 变量声明提升
一、变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动
二、在基本的语句(或者说代码块)中(比如:if语句、for语句、while语句、switch语句、for...in语句等),不存在变量声明提升
三、函数声明会提升,但是函数表达式的函数体就不会提升
fun(); // hello
function fun(){
console.log("hello");
}
// --------------
// 提升后 function fun(){
console.log("hello");
} fun(); // hello
var fun = function(){
console.log("hello");
};
// --------------
// 提升后
var fun;
fun(); // 报错,TypeError: fun is not a function
fun = function(){
console.log("hello");
};
四、如果一个变量和函数同名,函数声明优先于变量声明(毕竟函数是 JavaScript 的第一等公民),并且与函数名同名的变量声明将会被忽略
看几个例题:
第一个:
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo); //输出为10
}
bar();
在if语句中(在javascript不能叫块了吧~~),变量不会被提升,因此!foo判断为true,所以输出就为10啦。
第二个:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a); //
这是一道神奇的题。第一眼认为输出为10。but,根据第四句话,可以得到:
function b() {
function a() {};//变量提升
a = 10;
return;
}
function a() {} 这种定义方式和 var a = function () {}一样。所以,又可以得到:
var a = 1; //defines "a" in global scope
function b() {
var a = function () {}; //defines "a" in local scope
a = 10; //overwrites local variable "a"
return;
}
b();
alert(a); //alerts global variable "a"
var a=1;
(function(){
a=2;b=2; })();
alert(a==b); //true,作用域的问题,有var和没有var的区别~
JavaScript 变量声明提升的更多相关文章
- javascript变量声明提升和函数声明提升
在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分. JS的解析过程分为两个阶段:预 ...
- 浅谈JavaScript变量声明提升
前段时间阿里实习生内推,一面就被刷了,也是郁闷.今天系统给发通知,大致意思就是内推环节不足以了解彼此,还可以参加笔试,于是赶紧再投一次.官网流程显示笔试时间3月31日,时间快到了,开始刷题.网上搜了一 ...
- JavaScript变量声明提升
JavaScript代码在被解析引擎执行前,会被“编译”把变量声明等放在合适的作用域中,如果不了解这一点,会让人产生很多疑惑. 文章:详解js变量声明提升
- javascript变量声明提升(hoisting)
javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看一段代码 1 2 3 4 5 var v = &quo ...
- javascript变量声明 及作用域
javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...
- 【转】javascript变量声明 及作用域
javascript变量声明提升(hoisting) javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看 ...
- javascript变量声明及作用域总结
javascript变量声明及作用域总结 一.总结 一句话总结:还是得好好看书,光看视频是不得行的,浅学无用,要相互印证,要真正理解才有用,比如<Javascript权威指南> 书 1.j ...
- 解读JavaScript中的Hoisting机制(js变量声明提升机制)
hoisting机制:javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 知识点一:javascript是没有 ...
- [Effective JavaScript 笔记] 第12条:理解变量声明提升
js支持词法作用域,即除了极少的例外,对变量的引用会被绑定到声明变量最近的作用域中. js不支持块级作用域,即变量定义的作用域并不是离其最近的封闭语句或代码块,而是包含它们的函数. 不了解这个会产生一 ...
随机推荐
- [Mysql 查询语句]——查询指定记录
#比较 等于; 大于; 小于; 小于或等于; 大于或等于; 不等于; 排除掉; #指定范围查询 BETWEEN IN ; ; #指定集合查询 IN ,); ,); 集合元素可以是字符串类型 selec ...
- JavaScript对象——原型与原型链
原型与原型链 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function 是 JS 自带的函数对象.下面举例说明 va ...
- EF那点事
EntityFramework 1-->什么是EnitityFramework 1.1--> ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出 ...
- 关于service相关知识的认识
做android的程序开发也有了许久了,当做一个大程序的时候,越来越发现service是非常有用的方法,当你想后台运行数据或者音乐播放操作的时候,都可以才有service,根据实际情况,写成local ...
- Java - 关于泛型
自Java 1.5开始使用的泛型,泛型给人比较直观的印象是..."尖括号里写了类型我就不用检查类型也不用强转了". 确实,那先从API的使用者的角度上想问题,泛型还有什么意义? D ...
- [FORWARD]ODBC 各种数据库连接串
Overview Generally, one of the first steps when you are trying to work with databases is open it. Yo ...
- linux的日常经常使用的命令
现在经常用到linux命令,又时候回忘记,我就做个小笔记,大家也可以补充补充.....可以评论一下,我会截图做笔记的 netstat -ntlp //查看当前系统进程和端口等信息 tail -f fi ...
- 使用dom4j写xml文件——源码
1 dom4j下载与配置 1.1 dom4j下载 请移步下载链接 1.2 maven依赖 <dependency> <groupId>org.dom4j</groupId ...
- springboot----logback日志
默认情况下,Spring Boot 配置 ERROR, WARN, INFO 三种日志级别.如果需要 Debug 级别的日志.在 src/main/resources/application.prop ...
- UVA 562(01背包)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=s ...