zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    Python模块time、datetime
    Python装饰器、内置函数之金兰契友
    Python生成器、推导式之前襟后裾
    Python函数二(函数名,闭包,迭代器)之杵臼之交
    Python函数(一)之杵臼之交
    katalon系列二:selenium IDE的替代者——Katalon Recorder
    katalon系列一:初识Katalon Studio自动化测试工具
    windows下使用RoboCopy命令进行文件夹增量备份
    Selenium+Python自动化之如何绕过登录验证码
    UI自动化录制工具----UI Recorder
  • 原文地址:https://www.cnblogs.com/qijiang123/p/11549147.html
Copyright © 2011-2022 走看看