http://bonsaiden.github.com/JavaScript-Garden/zh/
// 译者注:来自 Nettuts+ 的一段代码,生动的阐述了 JavaScript 中变量声明提升规则
var myvar ='my value';
(function(){
alert(myvar);// undefined
var myvar ='local value';
})();
这个不理解
匿名包装器是个好东西:
推荐使用匿名包装器(译者注:也就是自执行的匿名函数)来创建命名空间。这样不仅可以防止命名冲突, 而且有利于程序的模块化。
eval
只在被直接调用并且调用函数就是 eval
本身时,才在当前作用域中执行
博客:
http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html
第三篇:全面解析Module模式 有一块不懂
跨文件共享私有对象
通过上面的例子,我们知道,如果一个module分割到多个文件的话,每个文件需要保证一样的结构,也就是说每个文件匿名函数里的私有对象都不能交叉访问,那如果我们非要使用,那怎么办呢? 我们先看一段代码:
var blogModule = (function (my) { var _private = my._private = my._private || {}, _seal = my._seal = my._seal || function () { delete my._private; delete my._seal; delete my._unseal; }, _unseal = my._unseal = my._unseal || function () { my._private = _private; my._seal = _seal; my._unseal = _unseal; }; return my; } (blogModule || {}));
任何文件都可以对他们的局部变量_private设属性,并且设置对其他的文件也立即生效。一旦这个模块加载结束,应用会调用 blogModule._seal()"上锁",这会阻止外部接入内部的_private。如果这个模块需要再次增生,应用的生命周期内,任何文件都可以调用_unseal() ”开锁”,然后再加载新文件。加载后再次调用 _seal()”上锁”。
完全没看懂
5.强大的原型与原型链
// 使用{}对象的 hasOwnProperty,并将其上下为设置为foo
{}.hasOwnProperty.call(foo, 'bar'); // true
可以避免hasOwnProerty 被非法占用
http://www.mollypages.org/misc/js.mp这个地址有原型链的图,研究一下啊
全局上下文的变量对象是从“Object.prototype”中继承的,所以我们可以得到没有声明的全局变量,从原型链中获取;(在sprider Monkey中)
with的作用域链:优先从Object.protoype中查找,如下图所示
汤姆大叔的javascript的闭包描述的很好,自己写一个
几个函数可能含有相同的父级作用域(这是一个很普遍的情况,例如有好几个内部或者全局的函数)。在这种情况下,在[[Scope]]中存在的变量是会共享的。一个闭包中变量的变化,也会影响另一个闭包的
function baz() {
var x = 1;
return {
foo: function foo() { return ++x; },
bar: function bar() { return --x; }
};
}
var closures = baz();
console.log(
closures.foo(), // 2
closures.bar() // 1
);
如图所示:
第十二章:变量对象
只有全局上下文的变量对象允许通过VO的属性名称来间接访问(因为在全局上下文里,全局对象自身就是变量对象,稍后会详细介绍),在其它上下文中是不能直接访问VO对象的,因为它只是内部机制的一个实现。
第十五章:
不理解下面这个分组操作符
// "foo" 是一个函数声明,在进入上下文的时候创建 alert(foo); // 函数 function foo(x) { alert(x); }(1); // 这只是一个分组操作符,不是函数调用! foo(10); // 这才是一个真正的函数调用,结果是10
注意,下面一个立即执行的函数,周围的括号不是必须的,因为函数已经处在表达式的位置,解析器知道它处理的是在函数执行阶段应该被创建的FE,这样在函数创建后立即调用了函数。
var foo = { bar: function (x) { return x % 2 != 0 ? 'yes' : 'no'; }(1) }; alert(foo.bar); // 'yes'
尝试一下
很不错,慢慢啃