var b = {}
let c = 1
this.a = 2;
要想正确执行它,我们需要知道以下信息:
var 把 b 声明到哪里;
b 表示哪个变量;
b 的原型是哪个对象;
let 把 c 声明到哪里;
this 指向哪个对象。
这个问题很有意思,对理解 js 很有帮助
在只有 var,没有 let 的旧 JavaScript 时代,诞生了一个技巧,叫做:立即执行的函数表达式(IIFE),通过创建一个函数,并且立即执行,来构造一个新的域,从而控制 var 的范围。
由于语法规定了 function 关键字开头是函数声明,所以要想让函数变成函数表达式,我们必须得加点东西,最常见的做法是加括号。
(function(){
var a;
//code
}());
(function(){
var a;
//code
})();
终于讲到这里了!!!
但是,括号有个缺点,那就是如果上一行代码不写分号,括号会被解释为上一行代码最末的函数调用,产生完全不符合预期,并且难以调试的行为,加号等运算符也有类似的问题。所以一些推荐不加分号的代码风格规范,会要求在括号前面加上分号。
;(function(){
var a;
//code
}())
;(function(){
var a;
//code
})()
我比较推荐的写法是使用 void 关键字。也就是下面的这种形式。
void function(){
var a;
//code
}();
js 的 let 跟 swift 不一样哦,是用来产生块级作用域的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/let
realm:这也是作用域相关的东西,完全不懂