《JavaScript设计模式与开发实践 》 - 3.1.2 变量的生存周期

在讲述闭包之时,碰到一段代码,让我百思不得其解。代码如下:

var Type = {}; 
for ( var i = 0, type; type = [ 'String', 'Array', 'Number' ][ i++ ]; ){ 
 (function( type ){ 
     Type[ 'is' + type ] = function( obj ){ 
         return Object.prototype.toString.call( obj ) === '[object '+ type +']'; 
     } 
 })( type ) 
}; 
Type.isArray( [] ); // 输出:true 
Type.isString( "str" ); // 输出:true

js中标准for循环有三个参数
        for(参数一;参数二;参数三){
                循环体
        }
其中参数为空可以写为for(;;)。

参数一: 循环的初始值。
参数二:循环条件。
参数三:每次执行完 循环体之后,需要做的改变。
循环体:每次循环需要执行的内容。
注意:在for循环中,如果当前执行条件不满足循环条件会直接跳出循环。

在这里我是不太明白  type = [ 'String', 'Array', 'Number' ][ i++ ]  这一段的循环条件的,因为它没有结束循环的条件,但这里其实有隐藏的终止条件。
type = [ 'String', 'Array', 'Number' ][ i++ ];   等价于 type[0], type[1], type[2] 对应输出结果为'String', 'Array', 'Number'。下一次的循环条件变为了type[3],此时 type[3]输出结果为undefined,循环条件终止,跳出循环。

 

Type 循环3次获得三个方法。

 现在将这段代码改为标准for循环代码如下

var Type = {}; 
var  type = [ 'String', 'Array', 'Number' ];
for ( var i = 0; i<type.length;  i++){ 
 (function( type, i ){ 
    Type[ 'is' + type[i] ] = function( obj ){ 
        return Object.prototype.toString.call( obj ) === '[object '+ type[i] +']'; 
    } 
 })( type, i ) 
}; 
Type.isArray( [] ); // 输出:true 
Type.isString( "str" );// 输出:true 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值