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 AnythingSlider滑动效果插件
Feb 07 Javascript
JavaScript类和继承 prototype属性
Sep 03 Javascript
基于jquery的鼠标拖动效果代码
May 30 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
Mar 25 Javascript
jQuery实现表格颜色交替显示的方法
Mar 09 Javascript
简介JavaScript中fixed()方法的使用
Jun 08 Javascript
javascript文件加载管理简单实现方法
Jul 25 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
Jul 15 Javascript
vue元素实现动画过渡效果
Jul 01 Javascript
Electron-vue开发的客户端支付收款工具的实现
May 24 Javascript
完美解决vue 中多个echarts图表自适应的问题
Jul 19 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python 字符串操作方法大全
2014/03/11 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
python两个list[]相加的实现方法
2020/09/23 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
网上快餐厅创业计划书
2014/02/01 职场文书
财经学院自荐信范文
2014/02/02 职场文书
《狼》教学反思
2014/03/02 职场文书
委托书怎样写
2014/08/30 职场文书
中班教师个人总结
2015/02/05 职场文书
论文致谢词范文
2015/05/14 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python