1、在try-catch语句中,finally子句是可选的,当包含finally子句的时候,无论try还是catch语句中的return语句都会被忽略。所以,我们在使用finally子句的时候,要想清楚我们希望代码如何执行。
function fn () { try { a++; } catch(error) { console.log("in catch"); return; } finally { console.log("in finally"); } } fn(); // in catch in finally
2、jvascript中void是一个操作符,该操作符指定要计算一个表达式并且返回undefined。譬如underscore中就用void 0代替undefined。
3、undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写。所以直接使用undefined可能是不靠谱的。那么如何保证能保证取到undefined的值呢?可以采用如下两种方案:
jquery版:
(function( window, undefined ) { //... })( window );
这样写的优势:
- window和undefined都是为了减少变量查找所经过的scope作用域。当window通过传递给闭包内部之后,在闭包内部使用它的时候,可以把它当成一个局部变量,显然比原先在window scope下查找的时候要快一些。(原来的window处于作用域链的最顶端,查找速度慢)
- 在jquery压缩版本jquery.min.js中可以将局部变量window替换成单个字母,减小文件大小,提高加载速度。
- 将undefined作为参数传递给闭包,因为没给它传递值,它的值就是undefined。所以可以得到确切的undefined。
underscore版:
_.isUndefined = function(obj) { return obj === void 0; }
4、
时间: 2024-10-21 20:55:09