亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

js筆記二十七之預解釋的特殊處理及上級作用域

標簽:
JavaScript

预解释机制

in: "num" in window 判断num是否为window这个对象的一个属性, 是的话返回true, 不是的话返回false

var obj = {name:"lilei",age:18}console.log("name" in obj) // -> true;console.log("sex" in obj) // -> false

  1. 预解释的时候不管条件是否成立, 都要把带var的进行提前声明
    window的预解释:  var num -> window.num;

if(!("num" in window)){    var num = 12;
}console.log(num) // -> undefined

  1. 预解释的时候只预解释 "=" 左边的,右边的是值, 不参与预解释

// 匿名函数之函数表达式: 把函数定义的部分当做一个值赋值给我们的变量/元素的某一个事件var fn = function (){    console.log("ok")
}

fn();function fn(){    console.log("ok")
}
fn();

  1. 自执行函数定义的那个function在全局作用域下不进行预解释,当代码执行到这个位置的时候定义和执行一起完成了;
    自执行函数: 定义和执行一起完成

(function(num){})(100);
~function(num){}(100);
-function(num){}(100);
+function(num){}(100);
!function(num){}(100);

  1. 函数体中return 下面的代码虽然不在执行了,但是需要进行预解释; return后面跟着的都是我们返回的值,所以不进行预解释

function fn(){    console.log(num);  // -> undefined
    return function(){
        
    }    var num = 100;
}
fn();

  1. 如果在预解释的时候,如果名字已经声明过了,不需要重新的声明,但需要重新的赋值;
    在js中如果变量名和函数名重复了,也算冲突了
    预解释: var fn; window.fn; fn = xxxfff000 window.fn = xxxfff000

var fn = 12;function fn(){    console.log("ok");
}// 预解释: // 声明+定义fn(); // -> 2function fn(){console.log(1)};
fn(); // -> 2var fn = 10;
fn(); // -> 10() error: fn is not a functionfunction fn(){console.log(2)};
fn();

查找上级作用域

var num = 12;function fn(){    var num = 120;    return function(){        console.log(num);
    }
}var f = fn();
f(); // -> 120~function () {
    f(); // -> 120}();

如何查找当前作用域的上一级作用域?

  • 看当前函数是在哪个作用域下定义的,那么它的上级作用域就是谁 -> 和函数在哪执行的没有任何关系



作者:uplyw
链接:https://www.jianshu.com/p/e0d96b922837


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消