一篇简单的函数自我认知

javaScript中的函数

  • 如果你熟悉了一门其他流行语言,再来使用 JavaScript,那么JavaScript中的函数可能会给你造成一些误解,在JavaScript中,你可以将一个函数赋值给一个变量,还可以将函数作为一个参数传递给另外一个函数,甚至可以使得一个函数返回另外一个函数,这在一些主流语言中都很难实现。JavaScript 中的函数非常灵活,其根本原因在于JavaScript中的函数就是一种特殊的对象,把JavaScript中的函数称为一等公民(First Class Function),因为函数是javaScript中一等公民,使得JavaScript非常容易实现一些特性,比如闭包,还有函数式编程等

函数的本质

函数作为一个对象,可以被赋值、作为参数,还可以作为返回值的,那么如果一个函数返回了另外一个函数,那么就应该返回该函数所有相关的内容。

函数声明及函数表达式

  • 函数涉及到了很多底层概念,比如表达式、语句、函数即对象(在JavaScriptgit中)等,而且函数表达式和函数声明看起来类似,都是定义一个函数,然后再调用该函数,很容易把二者搞混淆了。
    引用大佬的教学文档
函数声明与函数表达式的差异

首先看以下代码

foo()
function foo(){ 
    console.log('foo')
}

foo函数正确执行

foo()
var foo = function (){ 
    console.log('foo')
}

报错

  • 其主要原因是这两种定义函数的方式具有不同语义,不同的语义触发了不同的行为。

    第一种称之为函数声明,第二种称之为函数表达式。
  • 我们在一个表达式中使用 function 来定义一个函数,那么就把该函数称为函数表达式。
bar = 5

把5改成一个函数定义,就变成函数表达式

bar = function () {
    console.log(bar)
}
函数表达式与函数声明的最主要区别
  1. 函数表达式是在表达式语句中使用 function 的,最典型的表达式是“a=b”这种形式,因为函数也是一个对象,我们把“a = function (){}”这种方式称为函数表达式
  2. 在函数表达式中,可以省略函数名称,从而创建匿名函数
  3. 一个函数表达式可以被用作一个即时调用的函数表达式

这里我们定义来一个函数foo,给foo函数设置来name,age属性

function foo() {
    var sum = 15
}
foo.name = 24
foo.age = 26
console.log(foo.name)

一个函数可以通过函数名加小括号调用

function bar() {
    var text = 10
    console.log(text)
}
bar()

除了以用函数名加小括号调用,还可以直接调用一个匿名函数(也可以叫自执行函数)

(function () {
    var item = 12
    console.log(item)
})()

还可以用apply,call调用函数
call

function myFunction (name){
    return name + 1
}
var sum = myFunction.call(this,(2))
console.log(sum)

apply

function myFunction (name){
    return name + 1
}
var sum = myFunction.apply(this,[2])
console.log(sum)

构造函数

function  myFunction(){
    return this.name
 }
function Foo(name) {
    this.name = name
}
const obj1 = new Foo('xxx')
var ba  r = myFunction.apply(obj1)
console.log(bar)

闭包

function foo(){
    var number = 1
    function bar(){
        number++
        console.log(number)
    }
    return bar
}
var mybar = foo()
mybar()

这段代码中在foo函数中定义了一个bar函数,并且bar函数引用了foo函数中的变量number,当调用 foo函数的时候,它会返回bar函数,这种称为闭包。

  • JavaScript中的对象就是由一组一组属性和值组成的集合,既然函数也是对象,那么函数也是由一组组值和属性组成的集合
  • 因为函数作为一个对象,是可以被赋值、作为参数,还可以作为返回值的,那么如果一个函数返回了另外一个函数,那么就应该返回该函数所有相关的内容
  • 函数之所以成为特殊的对象,这个特殊的地方是函数可以“被调用”,所以一个函数被调用时,它还需要关联相关的执行上下文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值