JavaScript 作用域 匿名函数 模仿块级作用域(私有作用域)

作用域 

对于有块级作用域的语言来说,for语句中定义并初始化的变量i在循环外是无法访问的。

而javascript没有块级作用域,for语句中定义的变量i在循环结束后,依旧会存在于循环外部的执行环境(作用域)中,在这里i的作用域是全局环境。

具体来说就是:使用var关键字声明变量时,这个变量会自动添加到距离最近的可用环境中。对于函数而言,这个最近的环境就是函数的局部环境。如果变量在未经声明的情况下被初始化,则该变量会被自动添加到全局环境。

不过有时候的确很需要块级作用域来解决一些问题,这时候我们就可以使用匿名函数来模仿块级作用域。

匿名函数

匿名函数就是没有名字的函数,有时候也被称为拉姆达(lamda)函数。

普通的函数声明如下:

1 function functionName(){
2  // Code goes here
3 }

匿名函数 如下:

1 function(){                               //   顾名思义,函数没有名字
2 // Code goes here
3 }

模仿块级作用域(私有作用域)

Javascript中模仿块级作用域

模仿块级作用域(私有作用域)的匿名函数的方式如下:

(function(){
    //块级作用域
})();

上面的代码中,首先以函数表达式的方式定义了一个函数,然后立即调用它。在这里定义函数的方式就是先创建一个匿名函数,然后将其赋值给变量myFunc,而在函数名称后加一对圆括号即表示调用函数。

因为在javascript中,function关键字表示一个函数声明的开始,而函数声明后面不能直接跟圆括号。而函数表达式后面可以跟圆括号,来表示函数调用。

注意:

在函数声明外面加一对圆括号就可以转换成函数表达式,事实上在括号前面添加 + —  等都能够将其转化为表达式。

 立即执行函数 函数作用域

(The End)
原文地址:https://www.cnblogs.com/oneplace/p/5499662.html