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的抓取博客园首页RSS的代码
Dec 01 Javascript
JavaScript在IE和FF下的兼容性问题
May 19 Javascript
js实现的标题栏新消息闪烁提示效果
Jun 06 Javascript
在浏览器中打开或关闭JavaScript的方法
Jun 03 Javascript
JavaScript实现数组随机排序的方法
Jun 26 Javascript
js数组去重的方法汇总
Jul 29 Javascript
vue.js绑定class和style样式(6)
Dec 09 Javascript
详解vue-validator(vue验证器)
Jan 16 Javascript
ng-events类似ionic中Events的angular全局事件
Sep 05 Javascript
详解小程序用户登录状态检查与更新实例
May 15 Javascript
Node 使用express-http-proxy 做api网关的实现
Oct 15 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
Feb 24 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
JS 数组基本用法入门示例解析
2020/01/16 Javascript
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python监控文件并且发送告警邮件
2018/06/21 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
求职信名称怎么写
2014/05/26 职场文书
应聘护士求职信
2014/07/21 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
教师工作能力自我评价
2015/03/04 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫