JavaScript

js变量提升

2019-07-29  本文已影响0人  Aniugel

1、如果一个声明的变量在函数体内,那他们的作用域就是函数的内部,如果在去全局作用域下声明,那他的作用域就是全局的。通过var 声明发的变量是无法用delete删除的。

/ num1为全局变量,num2为window的一个属性
var num1 = 1;
num2 = 2;
// delete num1;  无法删除
// delete num2;  删除
function model(){
var num1 = 1; // 本地变量
num2 = 2;     // window的属性
    // 匿名函数
    (function(){
        var num = 1; // 本地变量
        num1 = 2; // 继承作用域(闭包)
        num3 = 3; // window的属性
    }())
}
var a = 9;
    function demo() {
        console.log(a)
    }
    console.log('a' in window)//true
    console.log(window['a'])//9
    console.log(window.a)//9
    window.demo()//9

2、函数内部的声明的变量会被提升到函数的头部,函数在执行解析的时候,先进行变量声明处理,然后在运行函数内部的代码

if(!('a' in  window)){
  var a=1;//在解析时先声明var a  在window中  为true 
image.png
image.png

3、变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值语句2部分,声明置顶,赋值保留在原来的位置

var a=1;//拆解成如下
var a;
console.log(a)//undefined
a=1;

4、变量重复声明不会报错,后面的会覆盖前面的

image.png
上一篇 下一篇

猜你喜欢

热点阅读