javascript

2020-12-25  本文已影响0人  jiahzhon

语言分类

image.png

变量种类

语句基本规则

运算符

var data = ...
data && 执行一个语句,会用到data

Object

Snipaste_2020-12-26_18-08-43.png

typeof

类型转换

函数

声明方法

function theFirstName(){
}
var test = function abc() {
}
var demo = function() {
}

匿名函数的this

    var name = 'window'
    var person = {
        name :'Alan',
        sayName:function () {
            return function () {
                console.log(this.name)
            }
        }
    }
    person.sayName()()  // window 

解决方法还是有的,我们可以把外部作用域的this传递给匿名函数

    var name = 'window'
    var person = {
        name :'Alan',
        sayName:function () {
            var that = this
            return function () {
                console.log(that.name)
            }
        }
    }
    person.sayName()()  // Alan

形参和实参

语法分析

预编译

一些现象:

test();

function test() {
  console.log('a');
}
console.log(a);
var a = 123;

imply global 暗示全局变量

预编译

  1. 创建AO
  2. 找到形参a (var a = 123,重复了,OA只放一个a),形参b,此时AO:
AO {
  a : undefined,
  b : undefined,
}
  1. 将实参值和形参值统一,a 变成1
AO {
  a : 1,
  b : undefined,
}
  1. 在函数体里面找函数声明,赋予函数体(a变成function a(){} ,b 还是undefined(注意b并不是函数声明),d为 function d (){})
AO {
  a : function,
  b : undefined,
  d : function,
}

5 . 开始运行函数。第一个打印function。第二个打印123,function a (){}已经被提前了,所以不再运行,第三个还是打印123。b开始运行function.第四个打印function

全局的预编译

作用域链

分定义和执行时两步

Snipaste_2020-12-29_11-18-06.png
Snipaste_2020-12-29_11-17-45.png

闭包

Snipaste_2020-12-29_16-39-46.png Snipaste_2020-12-29_16-39-24.png
        function test(){
            var arr = [];
            for(var i = 0; i<10; i++){
                arr[i] = function () {
                    document.write(i+",");
                }()
            }
            return arr;
        }
        
        var myArr = test();
        for(var j = 0; j < 10; j++){
            myArr[j];
        }

立即执行函数

对象

Snipaste_2020-12-30_11-16-09.png
  1. var obj = {} plainObject 对象字面量/对象直接量
  2. 构造函数
    2.1 系统自带的构造函数 new Object()
    2.2 自定义
Snipaste_2020-12-30_14-56-12.png Snipaste_2020-12-30_15-05-54.png

包装类

var str = "abcd"; str.length = 2; 看似str直接调通的length,实际上是隐式地new String('abcd').length。str 本身没有.length

原型

call/apply

继承

使用技巧

Snipaste_2021-01-04_15-24-50.png Snipaste_2021-01-04_15-25-48.png Snipaste_2021-01-04_15-56-43.png Snipaste_2021-01-04_16-06-49.png

this

  1. 函数预编译过程this ===> window
  2. 全局作用域里this ====> window
  3. call/apply 可以改变函数运行时this指向
  4. obj.func(); func()里面的this指向obj

数组

Snipaste_2021-01-05_10-59-17.png

错误

  1. EvalError: eval()的使用与定义不一致
  2. RangeError: 数值越界
  3. ReferenceError: 非法或不能识别的引用数值
  4. SyntaxError: 发生语法解析错误
  5. TypeError: 操作数类型错误
  6. URIError: URI处理函数使用不当

es5严格模式

DOM

事件

Snipaste_2021-01-06_15-31-47.png Snipaste_2021-01-06_15-38-48.png Snipaste_2021-01-06_16-58-29.png

Json

上一篇下一篇

猜你喜欢

热点阅读