美文网首页
2.全局变量的细节问题和预解释机制

2.全局变量的细节问题和预解释机制

作者: faceLess_void | 来源:发表于2018-05-10 00:35 被阅读0次

全局变量的细节问题

console.log(num); //undefined
var num = 12;
console.log(num2); //num2 is not defined
num = 12;

 在全局作用域当中,带var和不带var的关系?
        带var的可以进行预解释,所以在赋值的前面执行,不会报错
        而不带var的是不能进行解释的,在前面执行会报错

        var num = 12;
        console.log(num); //12
        首先相当于给全局作用域增加了一个全局变量num,但是不仅如此,也相当于给window增加了
        一个属性名num2,属性值是12

        num2 = 12;
        console.log(num2);//12
        num2=12相当于给window增加了一个叫做num2的属性名,属性值是12

    function fn(){
        console.log(total);  //undefined
        var total = 100;
    }
    fn();
    console.log(total);//undefined
    var total = 0;


    function fn(){
        console.log(total);//0
        total = 100;
    }
    fn();
    console.log(total);//100
    var total = 0;

    私有作用域出现的一个变量不是私有的,则往上级作用域进行查找,上级没有则继续向上查找,
    一直找到window为止,如果window下也没有呢?
    我们是获取值:console.log(total); //报错了
    如果我们是设置值:total =100;相当于给window增加了一个属性名total,属性值是100
    js如果在不进行任何特殊处理的情况下,上面代码报错,下面的代码都不执行了

预解释是一种毫无节操的机制

判断num是否为window这个对象的一个属性,是的话返回true,不是返回false
    var boj = {
        name:'hulongfei',
        age:27
    };
    console.log('name' in obj); //true
    console.log('it' in obj); //false


   预解释的时候不管的条件是否成立,都要把带var的进行提前声明
    if(!("num" in window)){
        var num = 12;
    }
    console.log(num); //undefined
   fn();
    function fn(){
        console.log('ok');
    }
    fn(); 

  匿名函数之函数表达式
    预解释的时候只预解释等号左边的,右边的值,不参与预解释
    window下的预解释:var fn;

    fn(); //fn is not a function 
    var fn = function(){
        console.log('ok');
    }
自执行函数:定义和执行一起完成了
    在全局作用域下不进行预解释,当代码执行到这个位置的时候定义和执行就一起完成了
    (function(num){})(100);
函数体中return下面的代码虽然不再执行了,但是需要进行预解释,return后面跟
    着的都是我们返回的值,所以不进行预解释
    function fn(){
        console.log(num);
        return function(){

        }
        var num = 100;
    }
    fn();
如果在预解释的时候名字已经声明过了,不需要重新声明,但是需要重新的赋值
    在js 中如果变量的名字和函数的名字重复了,也算冲突,
    var fn = 13;
    function fn(){
        console.log("ok");
    }    

    fn();
    function fn(){
        console.log(1);
    }
    fn();
    var fn = 10;
    fn();
    function fn(){
        console.log(2);
    }
    fn();

相关文章

  • 2.全局变量的细节问题和预解释机制

    全局变量的细节问题 预解释是一种毫无节操的机制

  • 作用域链

    -如何区分私有变量和全局变量: 1.在全局作用域下声明(预解释的时候)的变量是全局变量2.在私有作用域中声明的变量...

  • 2.作用域链

    1.作用域 2.预解释是毫无节操的一种机制

  • 浅谈js的作用域

    1、如何区分私有变量和全局变量 (1).在全局作用域下声明(预解释的时候)的变量是全局变量;(2).在私有作用域中...

  • web前端面试题-javascript(四)

    1.预解释:不管条件是否成立都要进行预解释 2.预解释:等号右边的不进行预解释(匿名函数之函数表达式) 3.预解释...

  • 预解释

    1.为什么学习预解释 2.什么是预解释 3.带var和不带var的区别 3.预解释的6点总结 4.堆内存和栈内存

  • 预解释的变态机制

    首先先了解一个知识点:in: "num" in window, 判断num是否是window这个对象的一个属性,是...

  • js笔记之预解释的特殊处理及上级作用域

    预解释是毫无节操的一种机制 自从学了预解释,从此节操是路人 in: "num" in window 判断num是否...

  • JS独有预解释机制的流氓行为

    预解释是一种毫无节操的机制 自从学了预解释,从此节操是路人in:"num" in window,判断num是否为w...

  • 关于私有作用域的预解释

    如何区分私有变量还是全局变量: 在全局作用域下,预解释的时候,声明的变量是全局变量。 在"私有作用域中声明的变量"...

网友评论

      本文标题:2.全局变量的细节问题和预解释机制

      本文链接:https://www.haomeiwen.com/subject/xruarftx.html