JavaScript变量声明与提升
一直以来对变量提升都是比较模糊的,今天特地看了一下这个知识点,总结一下。
1、举个最简单的例子来说一下什么是变量提升吧。
function foo(){
console.log(x); // undefined
var x = 12;
console.log(x) //
}
foo();
由于变量声明提升,其实上述代码相当于
function foo(){
var x;
console.log(x); // undefined
x = 12;
console.log(x) //
}
foo();
可以看出,变量提升其实是变量声明的提升,变量值并没有提升。
现在将上述代码变一下。
var x = 123;
function foo(){
console.log(x); // undefined
var x = 12;
console.log(x) //
}
foo();
console.log(x) // 123 这里之所以结果为123,是因为在函数内声明的变量x虽然与函数外同名,但由于是在函数内且用关键字var来声明的,所以函数内的x只是一个局部变量,函数外无法访问到
2、在函数内变量声明前使用return关键字。
function too(){
console.log(y+"*"); // undefined*
y = 10;
console.log(y+"**"); // 10**
return; // 函数内return后的语句不会执行
console.log(y+"***");
var y = 2;
console.log(y+"****")
}
too();
因为变量声明提升,且函数内使用了return关键字,故函数内return后面的语句并不会执行。所以上述语句相当于
function too(){
var y;
console.log(y+"*"); // undefined*
y = 10;
console.log(y+"**"); // 10**
}
too();
3、控制语句内声明变量(如for循环或if语句中)
(1)、for语句内声明变量:
for(var i=0;i<5;i++){}
console.log(i) //
运行后可以看出,for语句内声明的变量,语句外仍然可以使用。
(2)、if语句内声明变量:
if(100){
var x = 30;
}
console.log(x) //
运行后,可以看出,在if语句内声明的变量在if语句外仍然可以使用。
(3)、在if语句内声明一个与外部同名的变量:
var x = 123;
if(100){
var x = 30;
}
console.log(x) //
运行后,可以看出if语句内的变量会覆盖if语句外声明的变量。
JavaScript变量声明与提升的更多相关文章
- JavaScript 变量声明提升
JavaScript 变量声明提升 一.变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动 二.在基本的语句(或者说代码块)中(比如:if语句.for语句.while语句.swi ...
- 浅谈JavaScript变量声明提升
前段时间阿里实习生内推,一面就被刷了,也是郁闷.今天系统给发通知,大致意思就是内推环节不足以了解彼此,还可以参加笔试,于是赶紧再投一次.官网流程显示笔试时间3月31日,时间快到了,开始刷题.网上搜了一 ...
- 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 变量声明 和 作用域
变量的声明 1.变量声明具有提升机制,Javascript在执行时,会把所有的声明都提升到当前作用域前面. 先看一下下面的例子: (function(){ alert(b)//b is not def ...
- JavaScript变量声明与变量声明提前
JavaScript变量声明 JavaScript中存储数据的容器称为变量.用关键字和标识符创建新变量的语句,称为变量声明.可以通过关键字var进行变量声明,在ES6中增加了let.const关键字声 ...
- JavaScript中的作用域与函数和变量声明的提升
var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); ...
- javascript变量声明提升和函数声明提升
在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分. JS的解析过程分为两个阶段:预 ...
随机推荐
- 对 Java 集合的巧妙利用
我们直接切入正题.首先大致介绍一下 Java 三大集合的一些特征: ①.ArrayList:底层采用数组结构,里面添加的元素有序可以重复. ②.HashSet:底层采用哈希表算法,里面添加的元素无序不 ...
- Xamarin.Android 引导页
http://blog.csdn.net/qq1326702940/article/details/78665588 https://www.cnblogs.com/catcher1994/p/555 ...
- Python random模块sample、randint、shuffle、choice随机函数概念和应用
Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序 列中的一个元素,打乱一组数据等. random中的一些重要函数的用法: 1 ).random() 返 ...
- CSS学习之首页简单布局
作为一个PHPer,在前端方面javascript.jquery这些的日常工作还搞的定.可对于div+css这些东西可就头疼了,所以现在开始学习CSS 跟着燕十八的教程开始从最基础学起,首先练习一个简 ...
- MySQL安装的三种方式
.markdown-preview:not([data-use-github-style]) { padding: 2em; font-size: 1.2em; color: rgb(171, 178 ...
- chromedriver与chrome版本映射列表
chromedriver与chrome版本映射列表: chromedriver版本 支持的Chrome版本 v2.30 v58-60 v2.29 v56-58 v2.28 v55-57 v2.27 v ...
- javascript函数与表达式
函数的定义 函数声明 由三部分组成:函数名,函数参数,函数体 函数体没有使用return关键字返回函数时,函数调用时返回默认的undefined:如果有使用return语句,则返回指定内容 funct ...
- TurnipBit-MicroPython开发板:跟孩子一起DIY跳动的心
天是越来越热了,小心脏也是越跳越快啊,为了表达现在激动的心情,必须做个激动的心开始跳动.紧接着就开始带领大家做个激动的心. 首先说说要借助的平台,这次仅仅需要借助一块TurnipBit开发板. Tur ...
- 【CSS初识】
一.CSS是什么? CSS是一种样式表语言,用于为HTML文档定义布局.例如,CSS涉及字体.颜色.边距.高度.宽度.背景图像.高级定位等方面. HTML用于结构化内容:CSS用于格式化结构化的内容. ...
- Android WebView存在跨域访问漏洞(CNVD-2017-36682)介绍及解决
Android WebView存在跨域访问漏洞(CNVD-2017-36682).攻击者利用该漏洞,可远程获取用户隐私数据(包括手机应用数据.照片.文档等敏感信息),还可窃取用户登录凭证,在受害者毫无 ...