函数

作者: zzzZink | 来源:发表于2018-08-17 20:34 被阅读0次

函数的声明方式:

function fn(){} //具名函数
var f = function (){} //匿名函数,必须将其赋给一个变量,这种形式称为函数表达式
var f = fucntion fn(){} //具名函数,函数表达式
var f = new Function('x', 'y', 'return x+y') //构造函数声明,最不常用
var f = ()=>{} //箭头函数

//对于var f = fucntion fn(){}这种形式的,只能通过f()调用
var f = function fn(){console.log('hello')}
fn() //报错
f() //hello

函数的本质

请看下面代码

//这是一个求三角形面积的函数
function area (width, height){
  s = width*hegiht.2
  return s
}

当我们每次需要求三角形面积的时候,调用这个函数即可,需要就用
所以,函数的本质就是可以反复调用的代码块,并且可以接受参数,结果会根据参数的不同而改变


this、arguments

this表示属性当前所在的对象

var obj = {
  n: 1,
  fn: function(){
    console.log(this.n)
  }
}
obj.fn() //1
obj.fn,call(obj) //1
obj.fn.call()  //undefined
var n = 2
obj.fn.call()  //2

call可以改变this的指向,this就是call的第一个参数,在非严格模式下,call的第一个参数为空或为undefined,this默认指向window

function fn(){
  console.log(this)
  console.log(this === window) 
}
fn.call()
//Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
//true

在严格模式下,call的第一个参数是什么this就是什么

function fn(){
  'use strict'
  console.log(this)
  console.log(this === window) 
}
fn.call()
//undefined
//false
fn.call(123)
//123
//false

arguments就是函数接收的参数,是一个伪数组,因为它的原型链没有Array.prototype这一环

function f(){
    console.log(arguments)
}
fn(1,2,3,4) //Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]

作用域、变量提升

每个函数都有自己单独的作用域,并且在函数内部也会发生变量提升。

函数内部的变量提升

  • var命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部

函数作用域问题

  • 若一个函数内部有子函数,代码如下
var a = 1
function f1(){
  var a = 2
  console.log(a)  //优先在f1范围内查找a,若找不到a向上查找(也就是全局范围),不会想下查找
  f2()
  function f2(){
    var a = 3
    console.log(a)
  }
}
f1()  //2 3
console.log(a)  //1

此时的作用域是这样的:


image.png

相关文章

  • 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/xtrtiftx.html