关于写出有效率的js代码的一点心得(1)
来源:互联网 发布:html5实战源码 编辑:程序博客网 时间:2024/06/06 09:54
在看过许多大牛们的文章之后,大致对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){
(function(){
var j = i;
$(array[i]).on('click',function(){
$('#mainView').load("upload.php?type="+j);
});
})();
}
}
②:check:function(array){
for(var i = 0; i < 3; ++ i){
(function(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]指向一个新的字符串对象
- 关于写出有效率的js代码的一点心得(1)
- 如何写出更有效率的代码?
- 关于JS的一点心得
- 代码优化的一点心得(1)
- 关于IIS5.1配置的一点心得
- 写出健壮的js代码
- 关于线程的一点心得
- 关于管理的一点心得
- 关于call_user_func的一点心得
- 关于“日志”的一点心得
- 关于 Quaternion 的一点心得
- 关于指针的一点心得
- 一点关于位图的心得
- 关于随机数的一点心得
- 关于scanf的一点心得。
- 关于CBitmap的一点心得
- 如何有效率的阅读代码
- 关于乱码的一点小小的心得
- 【C++】编写一个简单的类。包含构造函数,成员函数等。
- 浅谈new与delete(1)
- 小记
- 心情随笔
- linux MMU分析+s5pv210 ubot的mmu分析
- 关于写出有效率的js代码的一点心得(1)
- 复制构造函数,赋值操作符重载之间的区别
- 线程sleep方法
- 大数的乘法(包括浮点数)
- 什么是Winsock WSAData
- 编译器警告(等级 1 和等级 3)C4793
- 《第六周RFID作业》物联112118 林家辉
- sql update数据,条件是另一个表中的数据
- https://leetcode.com/problems/add-two-numbers/