简化 javaScript 代码技巧

1.&& 和 || 表达式
在函数中给变量设置默认值时:

function test(val){
    if(!val){
        val = "default value";
    }
}

上面代码可以这样简化

function test(val){
    val = val || "default value";
}

|| 表达式从左到右依次判断,若左边为真,则返回左边表达式的值,并不往后执行;若左边表达式为假,则继续判断右边表达式,并返回右边表达式的值。

还有如下的 if 判断

if(age && age > 18){
    return true;
}else {
    return false;
}

可以写成

return age && age > 18;

&& 表达式从左到右依次判断,若左边表达式为假,则直接返回左边表达式的值,并不往后执行;若左边表达式为真,则继续判断右边表达式,并返回右边表达式的值。

看下面这个例子

function checkLogin(userName){
    if(userName){
        logIn(userName);
    }else {
        signUp();
    }
}

可以改写为

function checkLogin(userName){
    userName && logIn(userName) || signUp();
}

如果 userName 为真,则调用logIn 函数,并传递 userName 参数;如果 userName 为假或者 logIn 函数返回值为假,则调用 signUp 函数.

在看这个例子

var user = {id:'user id',log: 'user log'}, userId;
if(user && user.log){
    userId = user.id;
} else {
    userId = null;
}

可以改写为

var user = {id:'user id',log: 'user log'}, userId;
userId = user && user.log && user.id;

如果 user 为真,则调用 user.log ,并判断 user.log 的真假,若 user.log 为真,则返回以三个表达式的值。
如果 user 为空,则返回 null.

2.立即调用函数表达式

(function(){
    // do ...
})();

他相当于

? = function(){};

(? = function () {} );

函数被一个不知名的变量引用了,并用一对括号包含,就将其变为一个匿名的函数表达式。
同样的我们可以创建一个命名的立即调用的函数,

(show = function(txt){
    alert(txt || "aaa");
})();
show('bbb'); // bbb
show(); // aaa

当你不用var关键词创建变量的时候, JavaScript会自动判断该变量为全局变量. 在上面的例子中是没有必要使用var关键词的(因为你之后可能会调用它).

我们可以马上或者在这之后使用这个函数

但是我们不可以在之后调用匿名函数. 因为除非你创建匿名函数之后马上调用, 在这之后没有其他办法可以引用它. 这是匿名函数只可以马上调用它的原因.

当把匿名函数包含在一对括号里面时(字面量), 整个字面量会被运算,并且返回匿名函数的返回值. 它的返回值实质上是整个匿名函数自身, 所以我们只需要在这之后加上一对括号来马上调用它.

因此, 后面的一对括号等于告诉JavaScript编译器马上调用这个匿名函数, 所以它才会被称之为”立即调用函数表达式”.

因为JavaScript基于函数块的作用域规则, 在匿名函数内声明变量都是局部变量, 所以这些局部变量没办法直接从外部获取.

就像其他函数一样, 你可以向匿名函数设定参数和传递变量. 你可以根据这个特性, 利用匿名函数的作用域扩展它外围函数的作用域(即闭包).

更多文章请查看:http://www.ituring.com.cn/article/197347

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值