谈谈javascript的函数表达式及其应用

咱们都知道定义函数的方式有两种,一种是函数声明,另一种就是函数表达式数组

函数声明

语法为:function关键字后跟函数名。例如:浏览器

function functionName(arg0) {
    //函数体
}
alert(functionName.name)  // "functionName"

函数声明最主要的特征就是函数声明的提高,因此咱们能够把函数声明放在调用它的语句的后面,由于执行代码前会先读取函数声明。好比:闭包

hello();
function hello(){
    alert("hello");
}

上面的代码能够在浏览器正常运行。函数

函数表达式

语法以下:code

var functionName = function(arg0){
    //函数体
};
alert(functionName.name)  // ""

如上所示当咱们输出函数名时返回了空字符串,由于function关键字后面没有标识符,这种状况下建立的函数为匿名函数。接下来咱们就谈谈利用函数表达式所建立的匿名函数有什么应用。索引

应用

函数表达式最典型的应用就是模仿块级做用域,咱们都知道JavaScript没有块级做用域,不过咱们能够用函数表达式模仿块级做用域。造成独立做用域,从而避免全局污染
操做方法:声明匿名函数,立马调用。
最经典的例子:ip

function createFunctions(){
    var result = [];
    for (var i=0; i < 10; i++){
        result[i] = function(){
            return i;
        };
    }
    return result;
}
createFunctions();

乍一看每一个函数都应该返回本身的索引值,即位置0的函数返回0,1的返回1,以此类推。实际上每一个函数都将返回10,由于这里的i是贯穿整个做用域的,咱们把上面代码修改一下:作用域

//写法1
(function(){
    //这里是块级做用域
    var result = [];
    for(var i=0;i<10;i++){
        result[i] = (function(num){
            return function(){
                return num;
            };
        }(i))();
    }
    return result;
})();   //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
//写法2
var hasfunction = function(){
    var result = [];
        for(var i=0;i<10;i++){
            result[i] = (function(num){
                return function(){
                    return num;
            };
        }(i))();
    }
    return result;
}
hasfunction();

在当即执行函数执行的时候,i的值被赋值给num,同时建立返回num的闭包,从而result数组每一个函数都有一个num变量的副本。字符串

完。io

相关文章
相关标签/搜索