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 相关文章推荐
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 Javascript
基于Bootstrap+jQuery.validate实现表单验证
May 30 Javascript
jQuery实现简单倒计时功能的方法
Jul 04 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
JS验证图片格式和大小并预览的简单实例
Oct 11 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
80%应聘者都不及格的JS面试题
Mar 21 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
浅谈vue项目如何打包扔向服务器
May 08 Javascript
vue中v-text / v-html使用实例代码详解
Apr 02 Javascript
小程序封装路由文件和路由方法(5种全解析)
May 26 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php截取中文字符串函数实例
2015/02/23 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
JS实现图片切换特效
2019/12/23 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
Opencv求取连通区域重心实例
2020/06/04 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
机电一体化毕业生求职信
2013/11/02 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
盗窃案辩护词
2015/05/21 职场文书
高老头读书笔记
2015/06/30 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
pandas中pd.groupby()的用法详解
2022/06/16 Python