js中必须用分号的地方——由一个题目引起的思考
2017-09-08 14:29
260 查看
这篇文章是由一个题目引起的思考,那就先来看看题目
求这段代码输出什么
答案是:
第三个为什么是undefined呢,这个就涉及到js中this的用法了,为了明显,我们修改一下输出的对象
输出的结果:
也就是说,this指向了window对象。熟悉this属性的都知道,this属性只有在函数执行的时候才能确定,指向调用函数的对象。而自执行函数,自动执行,虽然是在函数内定义的,调用函数的对象并不是myProject,所以this还是指向全局对象的。
题目说完了,现在来看一下遇到的问题。
当时我是想自己测试一下的,然后我就自己打了一遍代码,因为js可以不用分号,这也是我的个人习惯,所以这次就结结实实踩了个坑…说多了,看代码
运行结果呢?
报错了,然后研究了好久都没有看懂,唯一区别就是分号,抱着试试看的态度,在自执行函数前面加了个分号,然后通过了。然后不服气,又写了个测试:
不服不行,报错了
方便对比,顺便直接打印了一下这个方法。打印成功了。
然后查了一下,在js中必须用分号的地方:
非第一行的+、-、/、()、[]开头时,前面要有分号
var myObject = { foo: "bar", func: function() { var self = this; console.log(this.foo); console.log(self.foo); (function() { console.log(this.foo); console.log(self.foo); }()); } }; myObject.func();
求这段代码输出什么
答案是:
bar bar undefined bar
第三个为什么是undefined呢,这个就涉及到js中this的用法了,为了明显,我们修改一下输出的对象
var myObject = { foo: "bar", func: function() { var self = this; console.log(this.foo); console.log(self.foo); (function() { console.log(this); })() } } myObject.func();
输出的结果:
bar bar Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
也就是说,this指向了window对象。熟悉this属性的都知道,this属性只有在函数执行的时候才能确定,指向调用函数的对象。而自执行函数,自动执行,虽然是在函数内定义的,调用函数的对象并不是myProject,所以this还是指向全局对象的。
题目说完了,现在来看一下遇到的问题。
当时我是想自己测试一下的,然后我就自己打了一遍代码,因为js可以不用分号,这也是我的个人习惯,所以这次就结结实实踩了个坑…说多了,看代码
var myObject = { foo: "bar", func: function() { var self = this console.log(this.foo) console.log(self.foo) (function() { console.log(this.foo) console.log(self.foo) })() } } myObject.func()
运行结果呢?
bar bar Uncaught TypeError: console.log(...) is not a function
报错了,然后研究了好久都没有看懂,唯一区别就是分号,抱着试试看的态度,在自执行函数前面加了个分号,然后通过了。然后不服气,又写了个测试:
var selfarg = { name: "llx" } (function(arg, undefined) { console.log(arg) })(selfarg)
不服不行,报错了
Uncaught TypeError: (intermediate value) is not a function,加上分号就没问题了。他说接收的变量不是function,ok改成function
function selfarg() { return { name: "llx" } } (function(arg) { console.log(arg) })(selfarg) console.log(selfarg)
方便对比,顺便直接打印了一下这个方法。打印成功了。
然后查了一下,在js中必须用分号的地方:
非第一行的+、-、/、()、[]开头时,前面要有分号
相关文章推荐
- 每一位游戏设计师都必须思考的一个问题
- 一个题目引发的闭包、函数声明以及作用域的简单思考
- 一个容器Crash引起的思考
- 本人写的一个不错的js封装类(有什么不好的地方请提出)
- 一个编程小题目引发的思考
- 一个逗号引起的JS错误
- Build Your Own Angularjs 读书笔记(AngularJS牛逼的地方在于它内嵌了一个表达式到Function对象的编译器。。。当然还有DI框架)
- js加载一个地方出错造成后续没有编译
- 一个lua代码中的bug引起的思考:不要被c++ crash堆栈误导
- 由一个简单的js题目想到的问题。。。。
- 一次和别人争吵一个按钮,点击后显示导航;再点击不显示的效果,是否一定以及必须用js?
- for语句引起一个死循环而引发的思考!!!
- 一个 JS 面试题目
- 一段旧代码,引起的关于OO中一个问题的思考
- 我们创造世界的过程也是一个我们如何思考的过程,要想改变世界,必须先改变我们的思想
- 一个JS题目反映出你的JS的掌握程度
- 【js思考】解决了一个小的语法问题
- 一个在校大学生和我的Email交流,希望能引起共鸣和思考~~纯属交流~~
- 一个小函数引起的思考
- 一个在线编辑js的地方