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操作select下拉列表框的代码
Jun 04 Javascript
JavaScript 事件入门知识
Apr 13 Javascript
JavaScript正则表达式之multiline属性的应用
Jun 16 Javascript
javascript解析xml实现省市县三级联动的方法
Jul 25 Javascript
JS中from 表单序列化提交的代码
Jan 20 Javascript
详解vue的数据binding绑定原理
Apr 12 Javascript
express框架实现基于Websocket建立的简易聊天室
Aug 10 Javascript
简单谈谈JS中的正则表达式
Sep 11 Javascript
微信小程序实现选项卡功能
Jun 19 Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 Javascript
JS实现公告上线滚动效果
Jan 10 Javascript
Vue SPA 首屏优化方案
Feb 26 Vue.js
详解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
一个目录遍历函数
2006/10/09 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
jquery 新浪网易的评论块制作
2010/07/01 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
js css自定义分页效果
2017/02/24 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
python爬虫常用的模块分析
2014/08/29 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
python使用thrift教程的方法示例
2019/03/21 Python
python绘制地震散点图
2019/06/18 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
招股说明书范本
2014/05/06 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python