既然下决心要把前端好好研究一番,那么就一定要深入学习一下。
昨天一个朋友给我发Email 推荐了这个网址:http://blog.goddyzhao.me/JavaScript-Internal 真的很不错,非常值得认真学习一下。
需要加固的知识点:
1、加不加 var 可是有区别的哟!!
a = 10;
alert(window.a); // 10
alert(delete a); // true
alert(window.a); // undefined
var b = 20;
alert(window.b); // 20
alert(delete b); // false
alert(window.b); // still 20
2、关于 this(最后三个表达式添加了特定的操作之后,调用括号左侧就不再是引用类型的值了。)
var foo = {
bar: function () {
alert(this);
}
};
foo.bar(); // Reference, OK => foo
(foo.bar)(); // Reference, OK => foo
(foo.bar = foo.bar)(); // global?
(false || foo.bar)(); // global?
(foo.bar, foo.bar)(); // global?
3、继续关于 this (有这么一种情况下,当调用表达式左侧是引用类型的值,但是this的值却是null,最终变为全局对象。 发生这种情况的条件是当引用类型值的base对象恰好为活跃对象。)
function foo() {
function bar() {
alert(this); // global
}
bar(); // 和AO.bar()是一样的
}
var x = 10;
with ({
foo: function () {
alert(this.x);
},
x: 20
}) {
foo(); // 20
}
5、通过Function构造器创建的函数的[[Scope]]属性
var x = 10;
function foo() {
var y = 20;
function barFD() { // FunctionDeclaration
alert(x);
alert(y);
}
var barFE = function () { // FunctionExpression
alert(x);
alert(y);
};
var barFn = Function('alert(x); alert(y);');
barFD(); // 10, 20
barFE(); // 10, 20
barFn(); // 10, "y" is not defined
}
foo();
问题就在于当函数通过Function构造器来创建的时候,其[[Scope]]属性永远都只包含全局对象。 哪怕在上层上下文中(非全局上下文)创建一个闭包都是无济于事的。
6、发生了什么?怎么最外层的“y”变成了30?
var x = 10, y = 10;
with ({x: 20}) {
var x = 30, y = 30;
alert(x); // 30
alert(y); // 30
}
alert(x); // 10
alert(y); // 30
- x=10, y=10
- 对象{x: 20}添加到了作用域链的最前面
- 在with中遇到了var语句,当然了,这个时候什么也不会发生。因为早在进入上下文阶段所有的变量都已经解析过了并且添加到了对应的变量对象上了。
- 这里修改了“x”的值,原本“x”是在第二步的时候添加的对象{x: 20}(该对象被添加到了作用域链的最前面)中的“x”,现在变成了30。
- 同样的,“y”的值也修改了,由原本的10变成了30
- 之后,在with语句结束之后,其特殊对象从作用域链中移除(修改过的“x”——30,也随之移除),作用域链又恢复到了with语句前的状态。
- 正如在最后两个alert中看到的,“x”的值恢复到了原先的10,而“y”的值因为在with语句的时候被修改过了,因此变为了30。
7、 [] == ![] 为何等于true? 一道简单的题目让我顿悟了!
自己发展一下:
【完】————基础很重要!
分享到:
相关推荐
深入学习JavaScript中的函数 javascript 入门教材
本资源为《深入学习javascript开发与实例》收集归档完整版。
如果你是一个JavaScript初学者,当你想更深入的了解和学习JavaScript时,建议你可以读读这片文章。【精华】
本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript...本书内容由浅入深,非常适合想要快速学习JavaScript编程或者深入钻研JavaScript的读者参考。
javascript-advanced深入学习JavaScript
今天小编就和大家深入学习JavaScript对象,感兴趣的小伙伴们可以参考一下,大家一起学习。
_filesjavascript如何避免内存泄露 - - JavaEye技术网站_filesprototype_js深入研究_files从 prototype_js 深入学习 javascript 的面向对象特性 - - AJAX - JavaEye论坛_files带参数的闭包函数的巧妙应用 - ...
主要介绍了深入学习JavaScript中的原型prototype,是JavaScript入门学习中的基础知识,需要的朋友可以参考下
深入理解 JavaScript 异步
主要介绍了深入学习JavaScript 高阶函数,在 JavaScript 中,函数是一种特殊类型的对象,它们是 Function objects。,需要的朋友可以参考下
主要介绍了深入学习JavaScript中的Rest参数和参数默认值,是JS入门学习中的基础知识,需要的朋友可以参考下
主要介绍了深入学习JavaScript的AngularJS框架中指令的使用方法,指令的使用是Angular入门学习中的基础知识,需要的朋友可以参考下
本书是iQuery之父的经典之作,是深入学习JavaScript技术的绝佳教材,涵盖了可重用代码、文档对象模型、Ajax、Web生产工具、AngularJS等内容。作者讲解了JavaScript的发展现状、实用技巧以及未来趋势,辅以诸多代码...
目前为止可以说是公认的最好的javascript教材,从入门到深入,十分经典。这本书网上可以说很少有中文版下载的。分两部分
本教程适用于想要从零开始学习JavaScript的初学者,也适用于想要深入学习JavaScript的进阶者。使用本教程可以帮助学习者快速掌握JavaScript的核心知识点,提高JavaScript编程能力。此外,本教程还提供了配套的代码和...
目前为止可以说是公认的最好的javascript教材,从入门到深入,十分经典。这本书网上可以说很少有中文版下载的。分两部分
javascript高效编程和函数式编程指南书籍PDF,适合深入学习javascript
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...