详谈js的变量提升以及使用方法
2018-10-06 12:19
645 查看
介绍
变量提升Hoisting是人们对JavaScript执行上下文工作方式的一种认识,并不是官方给出的改变
从字面上理解,变量提升的意思是变量和函数的声明会在物理层移动到作用域的最前面。但是这样理解并不准确,效果是相同的,但是实际的实现方式是JavaScript的变量和函数的声明会在编译阶段放入内存
这意味着使用者在正式声明一个函数或者变量之前就能够使用它
函数的提升
在JavaScript中,在声明一个函数前,我们就能够使用它,大家应该都体验过,像这样:
test(); function test() { // do something }
在正常的使用情况下,应该需要先声明函数才能调用,但是这种方法仍然能够运行,这是因为JavaScript自动将函数声明事先存入了内存的原因,看起来就像JavaScript自动把函数声明提升到了最前面
变量的提升
对于变量,JavaScript使用类似的方法,但是要注意一点的是,对于变量的提升,JavaScript只会将变量声明提升,但是不会把初始化提升,如果在变量初始化之前使用,则会得到undefined
// undefined console.log(a); // ReferenceError: b is not defined console.log(b); var a = 10;
// undefined console.log(num); num = 6; // 6 console.log(num); num += 7; // 13 console.log(num); var num;
// undefined console.log(num); num = 1; // 1 console.log(num); var num = 2; // 2 console.log(num);
这里要注意,JavaScript的变量提升是针对var的,而let和const不存在变量提升这一特性
// ReferenceError: a is not defined console.log(a); let a = 10;
一个复杂一点的例子
var a = 100; function fn() { // undefined console.log(a); var a = 200; // 200 console.log(a); } fn(); // 100 console.log(a); var a; // 100 console.log(a); // 300 var a = 300; console.log(a);
您可能感兴趣的文章:
相关文章推荐
- js如何把字符串转为变量使用,以及js下将字符串当函数去执行的方法
- block(代码块)的介绍以及使用方法和变量之间的关系
- JavaScript基础(基本语法:变量、语句、数组、函数、对象、全局方法以及js与java不同,js与html关联)
- JS中不同的函数创建方式以及相应的使用方法
- nodejs 全局变量和方法,以及console使用
- android学习笔记---53_采用网页设计软件界面,以及使用android系统内置的浏览器,利用js调用java方法
- JS字符串替换函数全部替换方法 JS 正则表达式如何使用变量
- twig里使用js变量的方法
- WinForm程序执行JS代码的多种方法以及使用WebBrowser与JS交互
- 不同窗口之间js方法,变量以及节点的访问
- JS中使用变量保存arguments对象的方法
- 使用querystring,session变量以及server.Transfer方法来实现页面间的值传递
- 在Angular外部使用js调用Angular控制器中提供的函数方法或变量
- C#中变量的使用以及命名方法
- 使用querystring,session变量以及server.Transfer方法来实现页面间的值传递
- 使用内核中更新mtd分区表方法以及查看和修改环境变量(fw_setenv)
- 抽象方法的成员方法,成员变量abstract的使用,以及其概述
- 使用js写点击一个事件使页面返回顶部以及控制一个元素在右下角的固定位置的方法
- Android项目使用Dcloud架构处理极光推送跳转以及加载JS回调方法
- js中对象复制以及apply方法的使用