JavaScript语言精粹_笔记

本文深入讲解JavaScript的基础语法、对象特性、函数调用模式、作用域与闭包等关键概念,并探讨了继承机制及如何减少全局污染等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第2章 语法

2.1 空白

避免使用 /* */注释,可能与正则表达式冲突

/*
   var rm_a = /a*/.match(s) ;
*/
2.5 语句

一个编译单元包含一组可执行的语句。在web浏览器中,每个<script>标签都提供一个被编译且立即执行的编译单元。因为缺少链接器,JavaScript把他们一起抛入一个公共的全局名字空间中。

不像其他语言,JavaScript中的代码块(一对花括号中的一组语句)不会创建一个新的作用域。

第3章 对象

JavaScript的简单类型包括数字、字符串、布尔值、null、undefined。其他所有的值都是对象(python是万物皆对象),包括函数、数组、正则表达式。

对象是属性的容器,每个属性都有名字和值。

注意了!尿点来了,JavaScript中的对象是无类别的(class-free),我的理解就是js里没有class的概念而只有对象。

对象(a)可以继承其他对象(b)的属性值,b就叫做a的原型,通过多次的继承可以形成一条继承链(类似python class继承链)。对象字面量最根部的原型是Object.prototype,函数对象最根部原型是Function.prototype(其实它也一样继承自Object.prototype)

3.7 枚举

for in 语句遍历对象的属性,其遍历顺序是不确定的,如果想要以确定顺序遍历对象请使用数组,用下标来遍历。

3.9 减少全局污染

全局变量减弱了程序的灵活性,作者推荐的方法是,只创建一个全局变量,作为名字空间使用。类似XXXX项目 每个脚本函数都以"x888888"开头,以清晰分辨其所在模块。

var MYAPP = {}
MYAPP.a = {
  "name" : "kelvin"  
  "make" : "love"
}

第4章 函数

 4.3 调用

除了声明时定义的形式参数,调用一个函数还会给它附加两个参数:this,arguments。arguments是调用函数时传递给函数的参数列表,包括那些声明时没有定义形式参数的多于参数。

函数调用有四种模式,每种模式this的值是不同的。

  • 方法调用模式
  • 函数调用模式
  • 构造器调用模式
  • Apply调用模式
var person = {
    name : "kelvin",sex : "man",say : function(str){
        document.write(str);
    }
};
person.say("nihao"); //方法调用,this是Person

var Add = function (a, b){
  return a + b;
};
var result = Add(1, 2); //函数调用模式,this被绑定到全局对象

var Person = function (name, sex){
    this.name = name;
    this.sex = sex;
};
var kk = new Person("kelvin", "man"); //构造器调用模式,重点说一下,使用new关键字时,将创建一个新对象kk,kk的原型就是Person的prototype。this绑定kk。 person.say.apply(null, "hello"); //apply调用模式,this是由apply的第一个参数所指定的
4.5 返回

函数执行完毕时或遇到return语句时返回到调用函数的地方,返回值是 return 后的值,如果没有return语句则返回undefined。

如果函数调用前使用了 new 关键字,则

  1. 没有return语句或return值不是一个对象,返回this,也就是新创建的对象
  2. 如果有return语句且返回的是一个对象,那返回值就是这个对象
4.9 作用域

JavaScript有函数作用域,定义在函数内部的变量和参数对于函数外部是不可见的,而且在函数中任何地方定义的变量在该函数的任何地方都可见。

最好的做法是在函数体的顶部声明函数可能用到的所有变量。

4.10 闭包

第5章 继承

附录C:JSlint

JSlint 是一个JavaScript验证工具(非开源),可以扫描JavaScript源代码来查找问题。如果JSLint发现一 个问题,JSLint就会显示描述这个问题的消息,并指出错误在源代码中的大致位置。有些编码风格约定可能导致未预见的行为或错误,JSLint除了能指 出这些不合理的约定,还能标志出结构方面的问题。尽管JSLint不能保证逻辑一定正确,但确实有助于发现错误,这些错误很可能导致浏览器的 JavaScript引擎抛出错误。

评论

示例代码的排版,阅读性差了一点,尤其是被翻页隔开的代码阅读有点蛋疼

翻译的还是欠点火候,直接读代码比看文字清晰的多

转载于:https://www.cnblogs.com/kelvinkuo/p/3196735.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值