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 日期分离成年月日的代码
May 14 Javascript
jQuery 源码分析笔记(5) jQuery.support
Jun 19 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
Dec 11 Javascript
javascript结合CSS实现苹果开关按钮特效
Apr 07 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
javascript实现给定半径求出圆的面积
Jun 26 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 Javascript
微信小程序的动画效果详解
Jan 18 Javascript
浅谈Javascript事件对象
Feb 05 Javascript
Node.js readline模块与util模块的使用
Mar 01 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 Javascript
js实现弹窗猜数字游戏
Nov 26 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简单生成缩略图相册的方法
2015/07/29 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
全面理解闭包机制
2016/07/11 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
Python决策树和随机森林算法实例详解
2018/01/30 Python
Python元组及文件核心对象类型详解
2018/02/11 Python
python实现电子产品商店
2019/02/26 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
python中if及if-else如何使用
2020/06/02 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
怎样创建、运行java程序
2014/08/01 面试题
工程专业毕业生自荐信范文
2013/12/25 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
社区活动总结报告
2014/05/05 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
单身申明具结书
2015/02/26 职场文书
资产移交协议书
2016/03/24 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
只用Python就可以制作的简单词云
2021/06/07 Python
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android