JS函数声明提升和变量声明提升
来源:互联网 发布:淘宝联盟怎么满减 编辑:程序博客网 时间:2024/05/21 17:55
简要归纳:
1、分声明和赋值两种情况。声明提升到头部执行,赋值留在原地。
2、变量声明:var a; 变量赋值 : var a=10;
3、函数声明:function a(){}; 函数赋值:var a=function (){};
如果function是声明中的第一个词,那么就是函数声明。否则就是函数表达式。
4、用let进行的声明不会在块作用域中进行提升。
1、JavaScript引擎首先会扫墓所有的变量声明,然后将这些变量声明移动到顶部。而赋值留在原地
eg1:
if (!("a" in window)) {
var a = 1; }
alert(a);
结果:undefined
分析:等价于
var a;
if (!("a" in window)) { //由于a已经被声明。所以判断条件为假。不执行赋值
a = 1; }
alert(a);
结果:undefined
eg2:
var num = 100;
function fn(){
var num = num + 1; //var num=window.num+1;正确(得到alert(101),此时才是外面的全局变量num
return num;
}
alert(fn());
答案是NaN
因为在函数体内部首先把var num提前,这样在赋值的时候 num + 1中的值是undefined,这样进行运算后答案就是NaN,
2、函数声明提升优先级高于变量声明提升。且变量表达式不被提升。
foo();//1
var foo;
functionfoo(){
console.log(1);
}
foo=function(){ console.log(2);}
处理过程:
functionfoo(){
console.log(1);
}
var foo; //并不执行,重复的声明
foo();
foo=function(){console.log(2);}
函数表达式不会被提升
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
其处理过程是
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
3、如果function是声明中的第一个词,那么就是函数声明。否则就是函数表达式。
eg1. (function foo() {...} ) 为函数表达式。
eg2. var foo = function () {...} 为函数表达式。
4、用let进行的声明不会在块作用域中进行提升。声明的代码被运行前,声明并不“存在”
{
console.log(bar) //ReferenceError
let bar=2;
}
- Js 变量声明提升和函数声明提升
- JS函数声明提升和变量声明提升
- JS中的函数声明提升和变量声明提升
- 变量声明提升和函数声明提升
- js函数变量声明提升
- 变量和函数声明提升
- JS变量声明提升
- js变量声明提升
- js变量声明提升
- 深入理解变量声明提升和函数声明提升
- 深入理解变量声明提升和函数声明提升
- 深入理解变量声明提升和函数声明提升
- 深入理解变量声明提升和函数声明提升
- 变量函数声明提升
- 变量声明提升 Vs. 函数声明提升
- JS面试中的的变量提升和函数声明
- js变量声明提升&undefined
- 详解js变量声明提升
- oracle初学存储过程
- 基于Retinex的图像去雾算法(MATLAB实现)
- 二、java语法基础
- JavaScript入门
- 第十章 PX4-Pixhawk-姿态控制
- JS函数声明提升和变量声明提升
- : Unable to connect to a repository at URL 'https://u-pc/svn/taotao/trunk/taotao/taotao-parent'
- 2017.6.27 学习记录 SVN 和 MySql工具的使用
- 设计模式(五)decorator
- 数据库索引的原理
- mysql常用命令
- Java小知识积累
- windows10在4k分辨率下eclipse,photoshop,百度云等工具栏图标会变得很小的问题方法总结(主要是eclipse)
- 两两交换链表中的节点