前面内容的复习 + Object.defineProperty() + 函数(this,严格模式,高阶函数,闭包,递归,拷贝) -- 暑假Day6

  • Object.defineProperty();里面有三个属性,这个方法用于定义对象中新属性或修改原有属性,第一个参数是想要修改的对象的对象名,第二个参数是对象的新的属性名或者原有的属性名,第三个参数是一个对象,书写属性的参数,第三个对象里面的值如下
    在这里插入图片描述

图中的第二个属性其实就是属性值可不可以被修改的意思

函数进阶

可以利用new Function(‘参数1’, ‘参数2’, ‘函数体’)来定义函数
参数可以是多个

    var f = new Function('a', 'b', 'console.log(a + b)');
    f(1, 2);

里面内容必须要以字符串格式书写

所有函数都是Function的实例,函数也属于对象
在这里插入图片描述

函数里面的this指向

在这里插入图片描述

其实还是谁调用就指向谁

btn.onclick = function () {
    
    
    this.disabled = true;
    setTimeout(function () {
    
    //this指向window
        this.disabled = false; 
    }.bind(this) ,3000)//bind里面的this指向btn
}

严格模式

在es5之后出现了严格模式,ie10及以上有严格模式

  • 保留字不可以作为变量名
  • 变量必须声明
  • 不能随意删除已经定义好的变量
  • 全局作用域中函数指向undefined
  • 如果构造函数不加new调用,this会报错
  • 定时器里面的this指向的还是window
  • 函数里面不能有一样的参数
  • 不允许在非函数的代码块里面书写函数
  1. 为脚本开启严格模式
    ‘use strict’;
    在所有代码前面书写

  2. 为某个函数开启严格模式
    在想开启的函数内部的顶端写上’use strict’;

高阶函数

函数里面接受的参数或者返回值是另一个函数,那么最开始的函数叫做高阶函数

callback&&callback();回调函数的执行

闭包

闭包是指有权访问另一个函数作用域中的变量的函数(其实也是函数)
简单理解就是一个作用域可以访问另一个函数内部的局部变量

function fun() {
    
    
    var num = 10;

    function fu() {
    
    
        console.log(num);
    }
    fu();
}

fun();

在这里插入图片描述

图中的closure就表示闭包

主要作用:延伸了变量的作用

用闭包获取当前li的索引号

var lis = document.querySelectorAll('li');

for(var i = 0; i < lis.length; i ++){
    
    
    (function (x) {
    
    
        lis[x].onclick = function () {
    
    
            console.log(x);
        }
    }(i));
}
var name = 'The Window';
var obj = {
    
    
    name : 'My Object',
    getName () {
    
    
        let that = this;
        return function () {
    
    
            console.log(that.name);
        }
    } 
}
obj.getName()();//My Object

这个里面涉及了闭包,哪怕that的作用域不在全局,但这样返回造成闭包导致仍然可以访问的到that

递归

一个函数在内部自己调用自己

拷贝

浅拷贝

浅拷贝es6中有一个语法糖,就是Object.assign(target, origin);

猜你喜欢

转载自blog.csdn.net/weixin_50948265/article/details/118827427