js面试总结2

原型和原型链:

题目,知识点,解答;

1.如何准确地判断一个变量是数组类型

2.写一个原型链继承的例子

3.描述new一个对象的过程

4.zepto(或其他框架)源码中如何使用原型链。

知识点

构造函数:

构造函数-扩展

原型规则和示例:

原型链:

instanceof:

构造函数:

 function Foo(name,age){
            this.name = name
            this.age = age
            this.class = 'class-1'
        }
        var f = new Foo('Zhang','20')

构造函数-扩展:

原型规则和示例:

5条原型规则,原型规则是学习原型链的基础

1.所有的引用类型(数组,对象,函数),都具有对象特性,即可自由扩展属性(除了,null,意外)

2.3.所有的引用类型(数组,对象,函数),都具有一个_proto_(隐士原型)属性,属性值是一个普通的对象,直接指定他的构造函数的prototype属性值,直接指向他的构造函数的

prototype类型属性值。

4.所有的函数,都有一个prototype(显示)属性,属性值也是一个普通的对象。

5.当试图得到一个对象的属性值时,如果这个对象本身没有这个属性,那么会去他的__proto__(即他的构造函数的prototype)中寻找。 

循环对象自身的属性

原型链:

作用域和闭包:

 

范围:一段<script>或者一个函数

全局:变量定义,函数声明。

函数:变量定义,函数声明,this,arguments

 

全局声明:就是把变量的声明都放到前面去。

call,apply,bind:

  fn()

        function fn1(name,age){
            alert(name)
            console.log(this)
        }
        fn1.call({x:100},'zhangshan',20)

        var fn2 = function (name,ag){
            alert(name)
            console.log(this)
        }.bind({y:200})
        fn2.call({x:100},'zhangshan',20)

作用域链:

在自己的下的小函数体内没有,去上一级作用域找没有在去上一级查找,这个叫作用域链。

 

        //块级作用域
        var name
        if(true){
            name = 'zhangshan'
        }
        console.log(name)

        // //作用域,a是一个全局作用域
        var a = 100;
        function fn(){
            var b = 200
            console.log(a)   //自由变量
            console.log(b)
        }
        fn()
        
        //作用域链
        var a = 100
        function f1() {
            var b = 200
            function f2(){
                var c = 300

                console.log(a)
                console.log(b)
                console.log(c)
            }
            f2()
        }
        f1()

闭包:

闭包的使用场景

函数作为一个返回值(返回上一个demo)

函数作为参数传递(自己思考)

function F1(){
            var a =  100
            return function () {
                console.log(a)   //自由变量,父作用域寻找
            }
        }
        var f1 = F1()
        var a = 200
        f1()
        //函数作为返回值
        //函数作为参数传递
        function F1(){
            var a =  100
            return function () {
                console.log(a)   //自由变量,父作用域寻找
            }
        }
        var f1 = F1()
        function F2(fn){
            var a = 200
            fn()
        }
        F2(f1)

闭包的总结:

变量的提升:变量的定义,函数的声明

说明this的几种不同使用场景:作为构造函数的执行,作为普通函数的执行,call,Apply ,bind

作用域和闭包的解题代码:

 

转载于:https://www.cnblogs.com/qijiang123/p/11549147.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值