浅析四种多见的Javascript声明循环变量的书写方式



浅析四种多见的Javascript声明循环变量的书写方式

这篇文章主要先容了四种多见的声明循环变量的书写方式,关于其举办庞杂的阐发和有点,必要的网友可以参考下
Javascript中的循环变量声明,终究应该放正在哪儿?

 

习惯1:不声明间接运用

function loop(arr) { 
 for (i = 0; i < arr.length; i++) { 
  // do something 
 } 
} 

很是惊险的运用风不雅,个别环境下轮回变量将成为window关于象上的一个属性被全局运用,极有大约影响次序的个别逻辑实现。
必要着重提一下的是,正在strict情势下,未声明变量而间接赋值的运用方式会间接抛出正常,早就该这么做啦!援用一下ecma-262标准附录C中的一段话:
"Assignment to an undeclared identifier or otherwise unresolvable reference does not create a property in the global object. When a simple assignment occurs within strict mode code, its LeftHandSide must not evaluate to an unresolvable Reference. If it does a ReferenceError exception is thrown (6.2.3.2)."
换言之,如果再运用未经声明的变量的话,ReferenceError正常会被抛出。


习惯2:放正在for轮回初始语句块中并频频声明

function loop(arr) { 
 for (var i = 0; i < arr.length; i++ ){ 
  // do someting 
 } 
 // console.log(i); 
 for (var i = 0; i < arr.length; i++ ){ 
  // do something else 
 } 
} 


这类方式看似最安全规范,不少从C和Java转到前端开发的同学都偏偏爱这样的写法,事实上,这大约是由于关于Javascript中一个重要概念有所误解造成的——变量作用域。区别于C和Java,Javascript其实不具备实在的块级功能域,也便是说,正在第一个轮回停滞之 后,console.log(i)其实不会打印undefined大约抛出ReferenceError正常,而是会个别打印出arr.length。
诚然,多么的写法诚然除了了难看之外意思不大,可是长久以来兼容性卓越且没有违抗任何规范——ecma标准中并无抑制正在某一个功能域内关于付对立变量的重复声明。


习惯3:正在函数顶部和其他变量一块儿汇合概念

function loop(arr) { 
 var var1; 
 var var2; 
 var i; 
 
 for (i = 0; i < arr.length; i++) { 
  // do something 
 } 
} 

这类c89-like式的变量概念方式正在Javascript中多少乎无可抉剔,既不会造成Javascript支持块级功能域的误解,又不会沾染全 局scope,还不违抗任何标准和规范,主要缺点便是循环变量的声明和轮回体大约会离隔有点远。正在不借助更多代码的条件下,除了了等待各大干流扫瞄器厂商实现ECMAScript 6中的let关头字之外,这个标题似乎找不到更好的搞定规划。


习惯4:将循环代码封装到IIFE中

function loop(arr) { 
 (function () { 
  for (var i = 0; i < arr.length; i++) { 
   // do something 
  } 
 })(); 
} 

最后一种习惯是前端次序员们熟悉的IIFE(I妹妹ediately-Invoked Function Expression),即当即实施函数。此种方式的主要缺点是抄写绝关于麻烦,且有多余的机能消费(很小),但正在兼容性、关于各标准规范的遵照上示意卓越。 如果不嫌麻烦,开拓者可以采用这类方式。

以上便是关于Javascript中四种多见轮回变量概念抄写风不雅的庞杂先容和阐发,各无利弊,读者可以分别自己的须要择优运用。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值