今天找到了一个很nice的js网站 ,不!是两个 一个博客,一个网站

来源:互联网 发布:linux nc命令 编辑:程序博客网 时间:2024/05/01 20:09

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'

尝试一下

很不错,慢慢啃

原创粉丝点击