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
预解释的时候不管条件是否成立, 都要把带var的进行提前声明
window的预解释: var num -> window.num;
if(!("num" in window)){ var num = 12; }console.log(num) // -> undefined
预解释的时候只预解释 "=" 左边的,右边的是值, 不参与预解释
// 匿名函数之函数表达式: 把函数定义的部分当做一个值赋值给我们的变量/元素的某一个事件var fn = function (){ console.log("ok") } fn();function fn(){ console.log("ok") } fn();
自执行函数定义的那个function在全局作用域下不进行预解释,当代码执行到这个位置的时候定义和执行一起完成了;
自执行函数: 定义和执行一起完成
(function(num){})(100); ~function(num){}(100); -function(num){}(100); +function(num){}(100); !function(num){}(100);
函数体中return 下面的代码虽然不在执行了,但是需要进行预解释; return后面跟着的都是我们返回的值,所以不进行预解释
function fn(){ console.log(num); // -> undefined return function(){ } var num = 100; } fn();
如果在预解释的时候,如果名字已经声明过了,不需要重新的声明,但需要重新的赋值;
在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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦