javascript变量声明提升和函数声明提升
在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。
JS的解析过程分为两个阶段:预编译期(预处理)与执行期。
console.log(a);//undefined
if (!("a" in window)) {
console.log(1)
var a = 1;
}
console.log(a);//undefined
function b (x) {
return x * 2;
}
var b;
console.log(b);//ƒ b (x) {return x * 2;}
console.log(f1()); //aa、aaa
console.log(f2); //undefined
function f1() {console.log('aa');return 'aaa';}
var f2 = function() {}
alert(a);//function a(){alert(10);}
a();//10
var a=3;
function a(){
alert(10);
}
alert(a)//3
a=6;
a();//TypeError: a is not a function
function test(){
console.log("函数声明");
}
var test;
console.log(test);
test = "变量";
上面代码打印结果:
总结:
1、js声明会提升,初始化不会提升!
2、js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!
javascript变量声明提升和函数声明提升的更多相关文章
- javascript 变量、常量 、 函数 声明
声明变量: 方式一: 使用 var 定义变量,可在定义的同时赋值 或 不赋值 . 方式二: 直接使用[变量名 = 值]的形式,这会定义一个全局变量,但在严格模式下会出现引用错误.[不建议使用] 方式三 ...
- 原型模式故事链(4)--JS执行上下文、变量提升、函数声明
上一章:JS的数据类型 传送门:https://segmentfault.com/a/11... 好!话不多少,我们就开始吧.对变量提升和函数声明的理解,能让你更清楚容易的理解,为什么你的程序报错了~ ...
- JS 函数提升&变量提升以及函数声明&函数表达式的区别
感谢原文作者:迟早会有猫 原文链接:https://www.cnblogs.com/SidselLoong/p/10515809.html 今天看js的变量提升问题,里面提到了函数提升.然后发现自己之 ...
- 【JS】函数提升变量提升以及函数声明和函数表达式的区别
今天看js的变量提升问题,里面提到了函数提升.然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错 一.变量提升 console.log(a) var a=100 //undefined ...
- 【JS点滴】声明提前,变量声明提前,函数声明提前,声明提前的先后顺序
声明提前,函数声明提前,好吧,老生常谈的问题了.正好,前些天在掘金看到一道关于声明提前的笔试题,那么这里就以这道题来作为本文的引子吧,代码如下: console.log(a)//? a();//? ; ...
- js变量的作用域、变量的提升、函数的提升
变量的作用域在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问.在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问. ECMAScript 6 之前的 Jav ...
- JavaScript变量提升和函数声明预解析
1.首先理解函数作用域 在JavaScript中,变量的定义并不是以代码块作为作用域的,而是以函数作用作用域的.也就是说,如果变量是在某个函数中定义的,那么它在函数以外的地方是不可见的.而如果该变量是 ...
- javascript:变量声明&&赋值的提升和函数声明&&定义的提升在不同情况下的表现
console.log(a); //undefined console.log(show); //函数的定义 show(); //aaa123 var a = 1; function ...
- js中变量提升(一个是变量,一个是函数表达式都会存在变量提升,函数声明不存在)
一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分.上个简历的例子如: ...
随机推荐
- Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
Atitit <摩奴法典>overivew 读后感 不是由国王 颁布的,而是 僧侣编制 1. <摩奴法典>是印度最古老的一部法律文献.该法典不是由国王或立法机关制定颁布的,而是 ...
- atitit.Sealink2000国际海运信息管理系统
atitit.Sealink2000国际海运信息管理系统 操作手册 目录 第一章 使用说明 第一节 系统登录 双击桌面的系统执行程序图标,进入选择数据库的对话框,如图1-1所示.选择相应的数据库后,点 ...
- 大型站点技术架构PDF阅读笔记(一):
1.数据库读写分离: 2.系统吞吐量和系统并发数以及系统响应时间之间的关系: 3.系统负载的概念: 4.反向代理的概念: 5.使用缓存来读取数据: 6.利用cookie来记录session: 利用co ...
- Redis_发布订阅(Spring Boot)
目录 前言 生产者和消费者 发布和订阅 Java实现 注意 转至 http://www.tianmaying.com/tutorial/springboot-redis-message 前言 利用Sp ...
- Oracle与Mysql插入多行数据
Oracle 一. insert allinto students values ('b10050501','zl')into students values ('b10050502','zjw')s ...
- poj2431优先队列
A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather ...
- HTML5之语音识别实例
HTML5之语音识别实例 代码 <input type="text" x-webkit-speech id="d1" lang="zh-CN& ...
- JQuery File Upload 插件 出现 “empty file upload result” 错误的解决方案。
本例中采用的是 JQuery File Upload + ASP.NET 的方式, Google了大半天基本没有找到合理的解决方案,倒是在 NodeJS的一遍博客中找到了灵感:http://www.i ...
- poj2391 Ombrophobic Bovines 拆点+二分法+最大流
/** 题目:poj2391 Ombrophobic Bovines 链接:http://poj.org/problem?id=2391 题意:有n块区域,第i块区域有ai头奶牛,以及一个可以容纳bi ...
- 11个免费的Web安全测试工具
1.Netsparker Community Edition(Windows) 这个程序可以检测SQL注入和跨页脚本事件.当检测完成之后它会给你提供一些解决方案. 2.Websecurify(Wind ...