`
zTreeAPI
  • 浏览: 345631 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入学习JavaScript

阅读更多

 

既然下决心要把前端好好研究一番,那么就一定要深入学习一下。

 

昨天一个朋友给我发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()是一样的
}
 
4、上面的情况在 With 时例外

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? 一道简单的题目让我顿悟了!

自己发展一下:

alert("000000" == false) //true
alert(["00000"] == ![]) //true
alert([""] == ![]) //true
alert("000000" == ![]) 和 alert("000000" == []) 为啥不一样呢?? 
alert("" == ![]) 和 alert("" == []) 为啥又一样呢??
alert(0 == ![]) 和 alert(0 == []) 为啥也一样呢??
 按照规则好好思考一下就明白喽!(有必要的话好好看看 ECMA-262 文档吧  http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

【完】————基础很重要!

 

分享到:
评论
3 楼 zTreeAPI 2012-11-23  
xing_kenny 写道
http://blog.goddyzhao.me/JavaScript-Internal%20

鏈接後面多了個 ‘%20’,直接打不開哦

感谢,排版时没注意,现在已修正
2 楼 xing_kenny 2012-11-23  
http://blog.goddyzhao.me/JavaScript-Internal%20

鏈接後面多了個 ‘%20’,直接打不開哦
1 楼 xing_kenny 2012-11-23  
嘿嘿 昨天俺也發現 var 的區別啦

相关推荐

    深入学习javascript开发与实例(全)

    《深入学习JavaScript开发与实例》这本书可能涵盖了许多关键主题,旨在帮助读者全面理解和掌握这门语言。以下是一些可能涵盖的知识点: 1. **基础语法**:包括变量声明(var, let, const)、数据类型(基本类型与...

    悟透JavaScript.pdf(想深入学习JavaScript的参考资料【精华】)[高清晰]

    在深入探讨JavaScript之前,我们首先要理解编程世界的基本构成:数据与代码。这两者之间的互动构成了编程的基础。 **数据**:通常较为稳定,代表着不变的信息。在编程中,数据可以视为存储信息的基本单位,比如数字...

    深入学习JavaScript中的原型prototype

    javascript 是一种 prototype based programming 的语言, 而与我们通常的 class based programming 有很大 的区别,我列举重要的几点如下: 1.函数是first class object, 也就是说函数与对象具有相同的语言地位 2.没有...

    深入理解JavaScript系列

    本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript...本书内容由浅入深,非常适合想要快速学习JavaScript编程或者深入钻研JavaScript的读者参考。

    JavaScript 深入学习【词法结构值类型和变量】

    深入学习JavaScript,首先要理解它的词法结构,这是编程语言的基本骨架,包括标识符、关键字、注释、空白以及分隔符等。词法结构是代码的外观和格式,对代码的可读性和可维护性至关重要。 在JavaScript中,值类型和...

    深入浅出Javascript压缩包3

    总之,《深入浅出JavaScript压缩包3》提供了深入学习JavaScript的良好资源,不论你是初学者还是有一定经验的开发者,都能从中受益。通过系统学习和实践,你将能够更好地驾驭这门语言,创造出更多富有创意的Web应用。

    javascript-advanced:深入学习JavaScript

    深入学习JavaScript意味着要掌握它的核心概念、语法特性以及高级技术。本文将基于"javascript-advanced"的学习资源,全面探讨JavaScript的各个方面,帮助你从初级开发者进阶到高级水平。 一、基础概念与语法 1. ...

    学习JavaScript的几本书!

    这里,我们聚焦于几本可以帮助你深入学习JavaScript的书籍,这些书籍涵盖了从基础到高级的各个层面。 首先,"JavaScript源代码大全"通常会提供JavaScript语言的内部工作原理,包括变量声明、数据类型、控制结构(如...

    非常全面的JavaScript学习资料

    这份"非常全面的JavaScript学习资料"压缩包,包含了11个深入学习JavaScript的文件,旨在为学习者提供一个详尽且丰富的学习路径。 1. **基础概念**:JavaScript的基础包括变量、数据类型(如字符串、数字、布尔值、...

    深入理解JavaScript.zip

    理解这一点对于深入学习JavaScript至关重要。 闭包是JavaScript中的一个高级概念,它允许函数访问并操作其外部作用域的变量,即使在其外部作用域已经关闭的情况下。这在实现私有变量和模块化时非常有用。 在异步...

    JavaScript深入编程网页收集

    _filesjavascript如何避免内存泄露 - - JavaEye技术网站_filesprototype_js深入研究_files从 prototype_js 深入学习 javascript 的面向对象特性 - - AJAX - JavaEye论坛_files带参数的闭包函数的巧妙应用 - ...

    智能社原创新版javaScript视频教程全集11G.rar

    本教程适用于想要从零开始学习JavaScript的初学者,也适用于想要深入学习JavaScript的进阶者。使用本教程可以帮助学习者快速掌握JavaScript的核心知识点,提高JavaScript编程能力。此外,本教程还提供了配套的代码和...

    javascript学习资料(ppt+代码)

    总的来说,这个压缩包提供的JavaScript学习资料是全面了解和深入学习JavaScript的良好资源。无论是对新手还是有一定经验的开发者,都能从中受益,提升自己的编程技能。通过PPT的学习和代码的实践,你可以逐步构建起...

    第一次学习JavaScript或刷你的JavaScript技能,甚至更深入的研究每个web开发人员都必须了解JavaScrip

    在深入学习JavaScript时,有几个核心概念需要理解: 1. 变量与数据类型:JavaScript支持动态数据类型,意味着变量可以在运行时改变其数据类型。基本数据类型包括字符串、数字、布尔值、null、undefined、symbol...

    前端学习JavaScriptpt配套资料

    深入学习JavaScript,还需要理解作用域和闭包,这是JavaScript中非常独特的特性。作用域决定了变量的可见性,全局作用域在整个脚本中都可访问,而局部作用域只在函数内部有效。闭包是一种特殊的现象,它允许函数访问...

    深入浅出javascript源代码.

    此外,深入学习JavaScript的错误处理和调试技巧也是必不可少的。 在实际应用中,JavaScript可以用于DOM操作,改变HTML元素的样式、内容或位置,实现AJAX异步请求,以及动画效果等。框架和库如jQuery、React、Vue等...

    javascript学习资料 + 笔记

    接着,深入学习JavaScript的对象和作用域。对象是JavaScript的核心特性,用于存储和组织数据,可以创建包含属性和方法的对象。作用域决定了变量在何处可以被访问,包括全局作用域、局部作用域以及ES6引入的块级作用...

    JavaScript的两本书

    在深入学习JavaScript的同时,也应该关注其最新的发展,例如ES6及后续版本带来的新特性,它们大大提升了JavaScript的表达能力和开发体验。同时,熟悉常用的JavaScript库和框架,如jQuery、React或Vue,将有助于...

    javascript教学课件

    深入学习JavaScript,还将涉及异步编程,如回调函数、Promise和async/await。这些技术用于处理非阻塞代码,确保程序流畅运行,特别是在处理网络请求和大数据时。AJAX(Asynchronous JavaScript and XML)是实现页面...

    Javascript语言参考大全

    这个压缩包包含三份中文的JavaScript参考资料,分别名为“Javascript语言参考大全.CHM”、“JavaScriptHelp_cn.chm”和“JavaScript参考教程.chm”,它们都是深入学习JavaScript的重要资源。 "Javascript语言参考...

Global site tag (gtag.js) - Google Analytics