• JavaScript面试题整理(一)作用域和闭包


    2019年11月11日整理

    一、作用域和闭包的问题

    首先我们要了解知识点: 执行上下文、this、作用域、作用域链和闭包,才能对下面的问题进行解答。

    1、知识点:执行上下文

    //函数表达式(也可以叫做变量定义)(这里会将var a提前到最前面,将a赋值为undefined)
    console.log(a); //undefined
    var a = 100
    // 函数声明(会将function fn()提前)
    fn('zhangsan') // 'zhangsan' 20
    function fn(name){
        age = 20
        console.log(name,age);
        var age
    }

    执行上下文的范围:是一段<script>或者是一个函数

      全局:变量定义、函数声明  =》一段<script>

      函数:变量定义、函数声明、this、arguments =>函数(注:this、arguments是在函数执行之前就定义好了,arguments是函数内所有参数的集合)

    2、知识点:this

    this要在执行时才能确认值,定义时无法确认

    this:作为构造函数执行、作为对象属性执行、作为普通函数执行、call,apply,bind

    (1)、构造函数中的this,(先把this赋值成一个空对象{ },再给this添加属性name,最后返回this给f)

    //构造函数中的this(先把this赋值成一个空对象{},再给this添加属性name,最后返回return this给f)
    function Foo(name) {
        this.name = name
    }
    var f = new Foo('zhangsan')

    (2)、对象属性中的this(其中this的指向为obj)

    //对象属性中的this(其中this的指向为obj)
    var obj = {
        name : 'A',
        printName: function(){
            console.log(this.name);
        }
    }
    obj.printName()

    (3)、普通函数中的this(指向的是window)

    //普通函数中的this
    function fn() {
        console.log(this); //this === window
    }
    fn();

    (4)、call 、apply 、bind

    //call、apply、bind
    // (1)、call,改变this的指向为call的第一个参数{x:100}
    function fn1(name,age) {
        alert(name)    //zhangsan
        console.log(this);    //Object {x:100}
    }
    fn1.call({x:100},'zhangsan',20)
    // (2)、apply,与call的差别是传递的第二个参数是数组
    function fn1(name) {
        alert(name)    //zhangsan
        console.log(this);    //Object {x:100}
    }
    fn1.call({x:100},['zhangsan',20])
    //(3)、bind 函数在执行的时候就已经用bind改变了this的指向,.bind必须是一个函数表达式
    var fn = function (name,age) {
        alert(name) //zhangsan
        console.log(this); //Object {{y=200}}
    }.bind({y=200})
    fn2('zhangsan',20)

    3、作用域

    1、说一下对变量提升的理解

       

    2、说明this几种不同的使用场景

    3、创建10个<a>标签,点击的时候弹出来对应的序号

    4、如何理解作用域

    5、实际开发中的闭包的作用

    • 添加到短语集
       
      • 没有此单词集: -> 中文(简体)...
         
      • 创建新的单词集...
    • 拷贝
  • 相关阅读:
    PLSQL13
    01.Spring引入
    验证码重构
    短信验证码登录思路
    记住我 token保存到数据库
    图形验证码及其重构
    个性化用户认证流程
    01.Spring Security初识,表单认证
    堆和栈的区别
    系统分析与设计第二次作业
  • 原文地址:https://www.cnblogs.com/gengzhen/p/11838262.html
Copyright © 2020-2023  润新知