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 相关文章推荐
select组合框option的捕捉实例代码
Sep 30 Javascript
超越Jquery_01_isPlainObject分析与重构
Oct 20 Javascript
HTML DOM的nodeType值介绍
Mar 31 Javascript
node.js开机自启动脚本文件
Dec 24 Javascript
JavaScript中字符串分割函数split用法实例
Apr 07 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
详解vue组件化开发-vuex状态管理库
Apr 10 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
easyui下拉框动态级联加载的示例代码
Nov 29 Javascript
Vue常用的几个指令附完整案例
Nov 06 Javascript
微信小程序云开发如何实现数据库自动备份实现
Aug 16 Javascript
JS常见错误(Error)及处理方案详解
Jul 02 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
文件系统基本操作类
2006/11/23 PHP
PHP5 面向对象程序设计
2008/02/13 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
php和nginx交互实例讲解
2019/09/24 PHP
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
Python中__new__与__init__方法的区别详解
2015/05/04 Python
python实现感知器算法详解
2017/12/19 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python实现抽奖小程序
2020/04/15 Python
Python 元组操作总结
2019/09/18 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
在Python中实现字典反转案例
2020/12/05 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
房地产融资计划书
2014/01/10 职场文书
一年级语文教学反思
2014/02/13 职场文书
爱心捐助倡议书
2014/05/19 职场文书
数学教育专业求职信
2014/07/22 职场文书
兽医医药专业求职信
2014/07/27 职场文书
个人工作年终总结
2015/03/09 职场文书
小学教学工作总结2015
2015/05/13 职场文书
工作调动申请报告
2015/05/18 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
Vue Element plus使用方法梳理
2022/12/24 Vue.js