JavaScript高级程序设计pdf,JavaScript高级程序设计

本文深入探讨JavaScript的基础,包括数据类型、变量与内存、对象、函数、IIFE和this。详细阐述了原型与原型链、执行上下文、作用域与作用域链以及闭包的概念。此外,还介绍了JavaScript中的对象创建模式和继承模式,以及线程机制与事件机制的基础知识,如进程、线程、事件循环模型和Web Workers。
摘要由CSDN通过智能技术生成

大家好,小编来为大家解答以下问题,javascript高级程序设计第五版 pdf,javascript高级程序设计pdf百度云,今天让我们一起来看看吧!

目录

一、深入基础

1.1数据类型

1.分类:

2.判断:

3.undefined与null的区别?

4.严格区别变量类型与数据类型?

1.2数据变量与内存

1.什么是数据?

2.什么是内存?

3.什么是变量?

4.内存,数据,变量三者之间的关系

5.var a = xxx; a内存中到底保存的是什么?

6.关于引用变量的赋值问题:

7.在js调用函数时传递变量参数时,是值传递还是引用传递?

8.js引擎如何管理内存

1.3对象

1.什么是对象?

2.为什么用对象?

3.对象的组成

4.如何访问对象内部的数据?

5.什么时候使用 [“属性名”] 这种方式

1.4函数

1.什么是函数?

2.如何定义函数?

3.如何调用函数?

4.回调函数

1.5 IIFE

1.6函数中的this

1.this是什么?

2.如何确定this的值?

二、函数高级

2.1原型与原型链

2.1.1原型(prototype)

2.1.2显示原型与隐式原型

2.1.3原型链

2.1.4原型链属性问题

2.1.5探索instanceof

 2.1.6原型面试题

2.2执行上下文与执行上下文栈

2.2.1变量提升与函数提升

2.2.2执行上下文

2.2.3执行上下文栈

2.2.4执行上下文2

2.2.5面试题

2.3作用域与作用域链

2.3.1作用域

2.3.2作用域与执行上下文

2.3.3作用域链

2.3.4作用域面试题

2.4闭包

2.4.1理解闭包

2.4.2常见的闭包

2.4.3闭包的作用

2.4.4闭包的生命周期

2.4.5闭包的应用_自定义JS模块

2.4.6闭包的缺点及解决

2.4.7内存溢出与内存泄漏

2.4.8闭包面试题

三、对象高级

3.1对象的创建模式

3.1.1Object构造函数模式

3.1.2对象字面量模式

3.1.3工厂模式

3.1.4自定义构造函数模式

3.1.5构造函数+原型组合模式

3.2继承模式

3.2.1原型链继承

3.2.2借用构造函数继承

3.2.3组合继承

四、线程机制与事件机制

4.1进程与线程

4.2定时器引发的思考

4.3JS是单线程的

4.4事件循环模型

4.5Web Workers


一、深入基础

1.1数据类型

1.分类:

-基本类型
-String:任意字符串
-Number:任意的数字
-boolean: true/false
-undefined:未定义
-null:空

-引用(对象)类型
-Object:任意对象
-Function:一种特别的对象(可以执行)
-Array:一种特别的对象(数值下标,内部数据是有序的)

2.判断:

-typeof:
可以判断:undefined、数值、字符串、布尔值
不能判断: null与object object与array
instanceof:可以判断对象的具体类型
=== 可以判断undefined、null

3.undefined与null的区别?

* undefined表示定义未赋值
* null表示赋值了,值为null
        什么时候给变量赋值为null?
* 初始赋值,表明将要赋值为对象
* 结束前,让对象成为垃圾对象(被垃圾回收器回收)

4.严格区别变量类型与数据类型?

* 数据的类型
- 基本类型
- 对象类型
* 变量的类型(变量内存值的类型)
-基本类型:保存就是基本类型的数据
-引用类型:保存的是地址值

1.2数据变量与内存

1.什么是数据?

-存储在内存中代表特定的信息,本质上是010101…
-数据的特点:可传递、可运算
-内存中所有操作的目标:数据
        逻辑运算
        算数运算
        赋值
        运行函数

2.什么是内存?

-内存条通电后产生的可储存数据的空间(临时的)
-内存产生和死亡:内存条==>通电==>产生内存空间==>存储数据==>处理对象==>断电==>内存空间和数据消失
-一小块内存的2个数据
        -内部存储的数据
        -地址值

-内存分类
        -栈:存储全局变量、局部变量
        -堆:存储对象

3.什么是变量?

-可变化的的量,又变量名和变量值组成
-每个变量都对应的一小块内存,变量名用来查找对应的内存,变量值就是内存中保存的数据

4.内存,数据,变量三者之间的关系

-内存用来存储数据
-变量是内存的标识

5.var a = xxx; a内存中到底保存的是什么?

- xxx 是基本数据,保存的就是这个数据
- xxx 是对象,保存的是对象的地址值
- xxx 是一个变量,保存的xxx的内存内容(可能是基本数据,也可能是地址值)

6.关于引用变量的赋值问题:

2个引用变量指向同一个对象,通过一个变量修改对象内部数据,另一个变量看到的是修改之后的数据。

2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象GPT改写

<>
          var obj1 = {name:"tom"};
          var obj2 = obj1;
          obj2.name = "bob";
          console.log(obj1.name);   //bob

          function fun(obj){
            obj.name = "TIMI";
          };

          fun(obj1);
          console.log(obj2.name);   //TIMI


          var a = {age:12};
          var b = a;
          a = {name:"mike",age:13};
          b.age = 14;
          console.log(b.age,a.name,a.age);  //14,mike,13

          function fun2(obj){
            obj = {age:15};
          };

          fun2(a);
          console.log(a.age);   //13

    </>
7.在js调用函数时传递变量参数时,是值传递还是引用传递?

- 理解1:都是值(基本/地址值)传递
- 理解2:可能是值传递,也可能是引用传递(地址值)

    <>
        var a = 3;
        function fun1(a){
            a = a+1;
        };
        fun1(a);
        console.log(a);//3

        function fun2(obj){
            console.log(obj.name);
        };

        var obj = {name:"tom"};
        fun2(obj);
    </>
8.js引擎如何管理内存

1.内存生命周期
        - 分配小内存空间,得到它的使用权
        - 储存数据,可以反复进行操作
        - 释放小内存空间

2.释放内存
        -局部变量:函数执行完自动释放
        对象:成为垃圾对象–>垃圾回收器回收

1.3对象

1.什么是对象?

- 多个数据的封装体
- 用来保存多个数据的容器
- 一个对象代表现实中的一个事物

2.为什么用对象?

- 统一管理多个数据

3.对象的组成

- 属性:属性名(字符串)和属性值(任意)组成
- 方法:一种特别的属性(属性值是函数)

4.如何访问对象内部的数据?

- .属性名: 编码简单,有时不能用
- [“属性名”]: 编码麻烦,能通用

5.什么时候使用 [“属性名”] 这种方式

- 属性名包含特殊字符:- 空格等
- 属性名不确定

    <>
         var p = {};
        //  1.给对象p添加一个属性:content-type:text/json
        // p.content-type = "text/json";    不能用
        p["content-type"] = "text/json";
        console.log(p["content-type"]);

        // 2.属性名不确定
        var propName = "myAge";
        var value = 18;
        // p.propName = value; 不能用
        p[propName] = value;
        console.log(p[propName]);
    </>

1.4函数


1.什么是函数?

实现特定功能的n条语句的封装体
只有函数是可以执行的,其他类型的数据不能执行

2.如何定义函数?

函数声明
表达式

3.如何调用函数?

test(); 函数名(); 直接调用
obj.test(); 通过对象调用
new test(); new调用
test.call/apply(obj); 临时让test成为obj的方法进行调用

4.回调函数

什么是回调函数?
1.自己定义的
2.没有调用
3.最终执行了(在某个时刻或某个条件下)

常见的回调函数?
1.dom事件回调函数
2.定时器的回调函数
3.ajax请求回调函数
4.生命周期回调函数

<body>
    
    <button id="btn01">回调</button>

    <>
        var btn01 = document.getElementById("btn01");
        btn01.onclick = function(){
            alert(this.innerHTML);
        };

        // 定时器
        setTimeout(function(){
            alert("到点了");
        },2000);
        
    </>
</body>

1.5 IIFE

IIFE 全称:Immediately-Invoked Function Expression (立即调用函数表达式),别名:匿名函数自调用。

作用:
- 隐藏内部实现
-不会干扰到外部(全局)命名空间
-用它来编码js模块

<>
         (function(){   //匿名函数自调用
             var a = 3;
             console.log(a+3);
         })();

         var a = 4;
         console.log(a);

         (function(){
             var a = 1;
             function test(){
                 console.log(++a);
             }

             window.$ = function(){     //向外暴露一个全局函数
                return{
                    test:test
                }
             };
         })();

         $().test();    //$是一个函数
                        //$执行后返回的是一个对象

     </>

1.6函数中的this

1.this是什么?

- 在任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
- 所有函数内部都有一个变量this
- 它的值是调用函数的当前对象

2.如何确定this的值?

- test(); window
- p.test(); p
- new test(); 新创建的对象
- p.call(obj); obj
 

< type="text/java">
        function Person(color) {
            console.log(this)
            this.color = color;
            this.getColor = function () {
                console.log(this)
                return this.color;
            };
            this.setColor = function (color) {
                console.log(this)
                this.color = color;
            };
        }

        Person("red"); //this是谁? window

        var p = new Person("yello"); //this是谁? p

        p.getColor(); //this是谁? p

        var obj = {};
        p.setColor.call(obj, "black"); //this是谁? obj

        var test = p.setColor;
        test(); //this是谁? window

        function fun1() {
            function fun2() {
                console.log(this);
            }

            fun2(); //this是谁? window
        }
        fun1();
    </>

二、函数高级

2.1原型与原型链

2.1.1原型(prototype)

1.函数的prototype属性
- 每个函数都有一个prototype属性,它默认指向一个Object空对象(即为原型对象)
- 原型对象中有一个属性constructor,它指向函数对象

2.给原型对象添加属性(一般都是方法)
- 作用:函数的所有实例对象自动拥有原型中的属性(方法)

    <>
        // 每个函数都有一个prototype属性,它默认指向一个Object空对象(即为原型对象)
        console.log(Date.prototype,typeof Date.prototype);
        function Fun(){

        }  
        console.log(Fun.prototype);//默认指向一个Object空对象(没有我们的属性)

        // 原型对象中有一个属性constructor,它指向函数对象
        console.log(Date.prototype.constructor===Date);
        console.log(Fun.prototype.constructor===Fun);

        // 给原型对象添加属性(一般是方法)--> 实例对象可以访问
        Fun.prototype.test = function(){
            console.log('test()');
        }

        var fun = new Fun();
        fun.test();
    </>
2.1.2显示原型与隐式原型

        1.每个函数function都有一个prototype,即显示原型(属性)
        2.每个实例对象都有一个__proto__,可称为隐式原型(属性)
        3.对象的隐式原型的值为其对应构造函数的显示原型的值
        4.总结:
        - 函数的prototype属性:在定义函数时自动添加的,默认值是一个空Object对象
        - 对象的__proto__属性:创建对象时自动添加的,默认值为构造函数的prototype属

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值