JavaScript中日常收集常见的10种错误(推荐)


Posted in Javascript onJanuary 08, 2017

 1 对于this关键词的不正确使用

Game.prototype.restart = function () { 
this.clearLocalStorage(); 
this.timer = setTimeout (function() { 
this.clearBoard(); 
}, 0); 
};

运行上面的代码将会出现如下错误:

uncaught typeError:undefined is not a function

为什么会有这个错? this是指代当前对象本身,this的调用和它所在的环境密切相关。上面的错误是因为在调用setTimeout函数的时候,实际调用的是window.setTimeout,而在window中并没有clearBoard();这个方法;

下面提供两种解决的方法。

1,将当前对象存储在一个变量中,这样可以在不同的环境被继承。

Game.prototype.restart = function() { 
this.clearLocalStorage(); 
var self = this; 
this.timer = setTimeout(function(){ 
self.clearBoard(); }, 0); 
}; //改变了作用的对象

2,使用bind()方法, 不过这个相比上一种会复杂,bind方法官方解释: msdn.microsoft.com/zh-cn/library/ff841995

Game.prototype.restart = function () { 
this.clearLocalStorage(); 
this.timer = setTimeout(this.reset.bind(this)), 
}; 
Game.prototype.reset = function() { 
this.clearBoard(); 
};

2 传统编程语言的生命周期误区

在js中变量的生存周期与其他语言不同,举个例子

for (var i=0; i<10;i++){ 
/* */ 
} 
console.log(i); //并不会提示 未定义,结果是10

在js中这种现象叫:variable hoisting(声明提前)

可以使用let关键字。

3 内存泄漏

在js中无法避免会有内存泄漏,内存泄漏:占用的内存,但是没有用也不能及时回收的内存。

例如以下函数:

var theThing = null; 
var replaceThing = function() { 
var priorThing = theThing; 
var unused = function() { 
if (priorThing) { 
console.log(‘hi'); 
}; 
}; 
theThing = { 
longStr: new Array(1000000).join(‘*'), 
someMethod: function () { 
console.log(someMessage); 
} 
} 
setInterval(replaceThing, 1000);

如果执行这段代码,会造成大量的内存泄漏,光靠garbage collector是无法完成回收的,代码中有个创建数组对象的方法在一个闭包里,这个闭包对象又在另一个闭包中引用,,在js语法中规定,在闭包中引用闭包外部变量,闭包结束时对此对象无法回收。

4 比较运算符

console.log(false == ‘0'); // true 
console.log(null == undefinded); //true 
console.log(” \t\r\n” == 0);

以上所述是小编给大家介绍的JavaScript中日常收集常见的10种错误(推荐),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
jQuery的12招常用技巧分享
Aug 08 Javascript
这段js代码得节约你多少时间
Dec 20 Javascript
根据json字符串生成Html的一种方式
Jan 09 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
Dec 08 Javascript
angularJS提交表单(form)
Feb 09 Javascript
JavaScript使用cookie记录临时访客信息的方法
Apr 07 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
Jul 10 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
Sep 29 Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 Javascript
react 中父组件与子组件双向绑定问题
May 20 Javascript
详解js中==与===的区别
Jan 08 #Javascript
JavaScript 动态三角函数实例详解
Jan 08 #Javascript
你不知道的 javascript【推荐】
Jan 08 #Javascript
js时间控件只显示年月
Jan 08 #Javascript
javascript函数的四种调用模式
Jan 08 #Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 #Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
Jan 08 #Javascript
You might like
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
smarty实现多级分类的方法
2014/12/05 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
python从Oracle读取数据生成图表
2020/10/14 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
《雷雨》教学反思
2014/02/20 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
简历自我评价优缺点
2015/03/11 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
详解Python中下划线的5种含义
2021/07/15 Python