函数

作者: 萌琦琦de诗扬 | 来源:发表于2018-09-06 15:08 被阅读0次

1. 创建函数的方式与区别

  1. 函数声明
    • 函数声明提升
// 变量提升 function add(){}
console.log(add(1, 2))   // 3
function add(a, b) {
    return a + b
}

  1. 函数表达式
// 变量提升 var add (var add = undefined)
console.log(add(1, 2))   // add is not a function
var add = function (a, b) {
    return a + b
}

  1. Function构造器
    • 作用域为局部作用域
var f1 = new Function('var a = 1; return a;')
console.log(f1())  //1
console.log(a)  //a is not defined   创建的变量是局部变量

2. this

  1. 全局作用域this指向window
this.a = 1
window.a    //1

console.log(this === window)   //true
  1. 一般函数声明的this指向window; 严格模式下,this等于undefined
function f1() {
    return this;
}
f1() === window   //true

function f1() {
    'use strict';
    return this;
}
f1() === undefined   //true
  1. 作为对象方法的this指向调用这个方法的对象(如: 对象o)
var o = {
    prop: 3,
    f: function() {
        return this.prop;
    }
};
console.log(o.f())   //3
  1. 原型链上的this指向对象
var o = {
    f: function() {
        return this.a + this.b
    }
}

var p = Object.create(o);
p.a = 1;
p.b = 2;
p.f()    //3   o是p的原型。o上的this指向p
  1. get、set方法的this指向调用它的对象
var o = {
    a: 1,
    b: 3
}

function f() {
    return this.a + this.b
}

Object.defineProperty(o, 'c', {
    get: f, enumerable: true, configurable: true
});

console.log(o.c)    //4
  1. 构造器中的this
  • new操作符执行的事情
    1. 创建一个新对象
    2. 构造函数作用域指向新对象(this指向新对象,该新对象的原型指向构造函数的prototype属性)
    3. 执行构造函数代码(为新对象设置属性)
    4. 返回新对象(若构造函数返回新对象则为该对象,若返回为空。返回this对象)
function My() {
    this.a = 37;
}
var o = new My();
console.log(o.a)   //37


function My1() {
    this.a = 37;
    return {a: 38};
}
var o = new My1();
console.log(o.a)   //38
  1. call/apply中的this指向call/apply方法第一个参数
function add(a, b) {
    return a + b + this.c
}
var o = {c: 3}
add.call(o, 1, 2)  //6

function add(a, b) {
    return a + b + this.c
}
var o = {c: 3}
add.apply(o, [1, 2])  //6
  1. bind中的this指向参数对象
function f() {
    return this.a;
}
var g = f.bind({a: 'test'});
console.log(g())   //test

var o = {a: 37, f: f, g: g};
console.log(o.f(), o.g())  //37  test

3. 闭包

闭包就是能够读取其他函数内部变量的函数(如:函数对象fun,可以取到函数outer内的变量local)

function outer() {
    var local = 30;
    return function(){
        return local;
    };
}
var fun = outer();
fun()  //30

相关文章

  • Excel(三)

    AND函数 OR函数 NOT函数 IF函数 频率分析函数FREQUENCY

  • if、else if、for、while、repeat函数

    ①if函数 ②else if函数 ③for函数 ④while函数 ⑤repeat函数

  • strsplit、mapply、paste、match函数

    strsplit函数 mapply函数 strsplit函数 mapply函数 paste函数 match函数 第...

  • Oracle中常用函数(SQL)

    Oracle函授有以下几个分类:数字函数、字符函数、日期函数、转换函数、集合函数、分析函数 数字函数: 字符函数:...

  • MySQL函数

    字符函数 数字运算函数 比较运算符和函数 日期时间函数 信息函数 聚合函数 加密函数 流程函数

  • BI-SQL丨AND & OR & IN

    AND函数 & OR函数 & IN函数 AND函数、OR函数和IN函数都可以理解是WHERE函数的补充,当然也可以...

  • Python之函数

    课程大纲 函数定义 函数的参数 函数的返回值 高阶函数 函数作用域 递归函数 匿名函数 内置函数 函数式编程 将函...

  • 函数基本知识

    函数 函数的定义: def 函数名() 函数的调用:函数名() #不能将函数调用放在函数定义上方 函数的文档注...

  • 积分表——不定期更新

    基本初等函数包括: 常函数: 幂函数 指数函数 对数函数 三角函数 反三角函数 I、反函数Ⅱ、复合函数:初等函数(...

  • MySQL基本使用

    函数 常用函数 数学函数 字符串函数 日期函数

网友评论

      本文标题:函数

      本文链接:https://www.haomeiwen.com/subject/hbsxgftx.html