首页 > Web开发 > 详细

JS函数

时间:2020-05-14 10:38:01      阅读:44      评论:0      收藏:0      [点我收藏+]

一、函数定义:

1、使用函数声明

1 function functionName(patameters) {
2     //
3 }

2、使用函数表达式

函数表达式可以在变量中存储;

let x = function(a, b) {
    return a * b
};

在变量中保存函数表达式之后,此变量可用作函数。

该函数实际上是一个匿名函数。存放在变量中的函数不需要函数名,它们总是使用变量名调用。

上面的函数使用分号结尾,因为它是可执行语句的一部分。

二、函数提升(hoisting)

Hoisting应用于变量声明和函数声明。

使用表达式定义的函数不会被提升。

三、自调用函数

函数表达式后面跟着()时,函数表达式会自动执行,而且需要在函数周围添加括号,以指示它是一个函数表达式。

注意:函数声明无法进行自调用。

(function () {
    let a = "aaaa"
})();

此函数实际上是一个匿名的自调用函数。

四、箭头函数

// ES5
var x = function(x, y) {
    return x * y
}
// ES6
const x = (x,y) => x * y;

箭头函数没有自己的this,它们不适合定义对象方法。

箭头函数未被提升,必须使用前进行定义。

使用const比使用var更安全,因为函数表达式始终是常量值。

函数参数问题:

形参:parameter

实参: argument

如果调用函数时省略了参数(少于被声明的数量),则丢失的值被设置为:undefined。

JS函数有一个名为arguments对象的内置对象,arguments对象包含函数使用时使用的参数数组。

JS 的call()方法:

call()方法是预定义的js方法,它可以用来调用所有者对象作为参数的方法,通过call(),可以使用属于另一个对象的方法。

eg:

let person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
}
let person1 = {
    firstName: "A",
    lastName: "B"
}
let person2 = {
    firstName: "C",
    lastName: "D"
}
person.fullname.call(person1); // 将返回A B

call()方法也可接受参数

与call()方法类似的方法apply()方法二者区别:

call()方法分别接受参数;

apply()方法接受数组形式的参数。

闭包:

概念:闭包就是通过函数嵌套,能够访问另一个函数作用域变量的函数。

function a() {
    var x = ‘123‘;
    var b = function() {
        console.log(x)
    }
    return b  //这里b就是一个闭包
}

闭包的特点:外部函数的参数和变量不会被垃圾回收机制回收。

原因:首先需要知道一个正常的单独函数当它执行结束后,它内部的定义的变量随即销毁,在js里定义的全局变量只有在程序结束才会被销毁,以及具有引用关系的对象也不会被销毁。

而在闭包函数中,a中的变量被b函数所引用,这时如果b函数赋给一个变量,那么这时a,b函数通过变量名调用后都不会被销毁,如下:

function a() {
    var x = ‘123‘;
    // console.log(‘dfadf‘)
    var b = function() {
        x = x+1
        console.log(x)
    }
    return b  //这里b就是一个闭包
}
var f = a()
 f()
 f()

 

结果:

 技术分享图片

如果没有使用变量,而是直接调用函数名:

function a() {
    var x = ‘123‘;
    var b = function() {
        x = x+1
        console.log(x)
    }
    return b  //这里b就是一个闭包
}
a()()
a()()

结果:

 技术分享图片

可以看出,如果没有赋给一个变量,函数调用一次之后创建的变量都会被回收,再次调用时会重新创建。

 

JS函数

原文:https://www.cnblogs.com/pureshee/p/12886402.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!