关于写出有效率的js代码的一点心得(1)

在看过许多大牛们的文章之后,大致对js的原理等有了一定的了解,现在来抛个砖希望各位点评。

要写出有效率的js代码先要牢记这一点,始终声明局部变量。全局变量在js中非常容易创建,然而坏处是会污染公共命名空间。相信前端开发的人都调用过别人的插件,良好的插件只暴露出一个对象名及其属性,插件的方法和变量全部封装在一个对象当中。如var a = 0,b = "string",c = function(){};就已经使用了三个变量名a,b,c,当封装成对象时则变成var obj = {a:0,b:"string,c:function(){}"},只需要调用obj.a~c即可达到相同的目的。

闭包也是被频频提及的东西,略过不谈,这里要讲一个容易出bug的例子,我在开发时写过以下一段代码 :

check:function(array){
for(var i = 0; i < 3;  ++ i){
$(
array[i]).on('click',function(){

$('#mainView').load("upload.php?type="+i);

});

}

}

一开始我以为不同标签响应的click事件分别对应参数type=1、2、3,结果发现这是type全部等于3,这是因为js是引用 i 而不是创建一个对象并将 i 赋值给它。修改方法有两种,代码如下:

①:check:function(array){

for(var i = 0; i < 3;  ++ i){
(f
unction(){

var j = i;

$(array[i]).on('click',function(){

$('#mainView').load("upload.php?type="+j);

});

})();

}

}

②:check:function(array){

for(var i = 0; i < 3;  ++ i){
(f
unction(j){

$(array[i]).on('click',function(){

$('#mainView').load("upload.php?type="+j);

});

})(i);

}

}

两种方法的原理是一样的,都是使用立即调用的方式创建了一个局部作用域,获得i的值而不是其引用,不过查阅资料后得知这种方式不能包含break和continue语句,因为这已经是属于函数外部,而且this和arguments的含义也会被改变。

复制字符串数组时同样如此:

var str = ["abc","cde"];

var str2 = str;//此时str2与str指向同一个数组

当时我犯了类似这样的一个错误: str2[1] = "";

str2[1] = str[0] + str[1]; // =>"abc";

正确的做法应该是

str2[1] = str[0] + str[1];//此时str[1]指向一个新的字符串对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值