Day14-JS进阶-

一、回调函数

二、IIFE

三、函数中的this

四、关于语句分号问题

五、原型与原型链

六、探索instanceof

七、执行上下文

八、作用域与作用域链

一、回调函数

Day14-JS进阶-_第1张图片

 

 Day14-JS进阶-_第2张图片

 

 

二、IIFE(立即调用函数表达式)

Day14-JS进阶-_第3张图片

 

 也可用于编写 js 模块

  var a = function (){
            console.log("a");
        }
        function b(){
            console.log("b");
        }
        (function c(){ //匿名函数自调用这个和IIFE其实是同一个概念的
            console.log("c");
        })()

最后打印出来的 只有 c

那就有一个疑惑了,为什么不能直接把这个匿名函数的内部代码直接在外面写了,而是要用这个“包”起来呢?

因为包起来的话,就是一个局部了,里面的变量就是一个局部变量,不会影响全局变量

(function d(){
            var a = 1;
            function test(){
                console.log(++a);
            }
             function test2(){
                console.log("test2");
            }
            window.$ = function(){
                return {
                    test: test
                }
            }
        })();

        $().test()

这种的话,就是把test向外暴露了,暴露为一个全局函数,但是test2没暴露出来,这也是匿名函数的一个功能了

其中不要被$里面了,在匿名函数d中,我们给这个$定义了一个函数,$其实就是一个函数,这个函数执行之后,就会返回一个对象

这个对象的名字叫做test,然后就可以通过test()来调用这个test函数了

 

三、函数中的this 

Day14-JS进阶-_第4张图片

 

 

扩展:函数call

https://www.w3school.com.cn/js/js_function_call.asp

 

 

 

四、关于语句分号问题

 Day14-JS进阶-_第5张图片

 

 一般在做项目的时候,如果用到很多js文件的话,都是在这个文件开始的时候添加上一个分号,防止代码合并的时候会出错的

 

五、原型与原型链

  1、原型prototype

下面是打印 Date.prototype 的结果

Day14-JS进阶-_第6张图片

 

 可以看到是一个object类型的,然后里面有很多内置的方法,这些方法都是给实例对象使用的

Day14-JS进阶-_第7张图片

 

 如果是这样打印的话,就是一个龙的object,但是我们可以人工的给这个函数原型添加方法

Day14-JS进阶-_第8张图片

 

Day14-JS进阶-_第9张图片

 

 

 Day14-JS进阶-_第10张图片

 

 Day14-JS进阶-_第11张图片

 

 ②Day14-JS进阶-_第12张图片

 

 返回了两个 true

Day14-JS进阶-_第13张图片

 

 也就是说构造函数和它的原型对象是有一种相互引用的关系,也就是构造函数的一个叫做prototype的属性可以找到这个构造函数的原型

并且这个构造函数的原型里面也有一个属性 叫做 constructor 可以找到这个构造函数本身

Day14-JS进阶-_第14张图片

 

 

2、显示原型和隐式原型

 

 


                    
                    

你可能感兴趣的:(Day14-JS进阶-)