JS函数

函数的5种声明

具名函数

function x (input1,input2){
    return undefined
}
//x 是一个特殊的变量,但是只能是函数
//输入1,输入2是参数
//必须有一个rturn值,不写的话,浏览器会自动添加

匿名函数

x = function (input1,input2){
    return undefined
}
//不能单独使用,需要赋给一个变量

具名函数赋给变量

var x = function y (input1,input2){}
console.log(y)
//Uncaught referenceError:y is not defined...

/* 不一致性!!! */

function y(){}
console.log(y)
//function y()

window.Function 函数对象

new Function('x','y','return x+y')
//x,y为参数;return x+y是函数体

箭头函数

(x,y) =>{return x+y}
(x,y) => x+y 
//函数体只有一句话,不能返回一个对象;花括号和return一起去掉
n => n*n
//参数只有一个,可以省略参数的括号

函数的name

function f(){}
f.name //"f"
var f = function (){}
f.name //"f"
var f = function f1(){}
f.name//"f1"
f = new Function()
f.name//"anonymous"  anonymous:匿名

如何调用函数

函数是什么?

JavaScript DOM编程艺术是这样定义的:

函数就是一组允许你在你的代码里随时调用的语句。每个函数实际上是一个短小的脚本。

eval():

作用:给一个字符串当作代码执行

eval('1+1')
eval('alert(1)')

call()

指向公用属性的__proto__.call()调用函数的函数体

f 是指对象

f.call()是执行对象的函数体

调用

函数的调用过程就是eval(函数体)的过程

f.call = function(){
    eval(f.body)
}

f.call()的用法

function f(x,y){return x+y}//函数本体
f(2,3)          //普通调用
f.call(undefined,1,2) //正规硬核调用

this和arguments

arguments 是一个对应于传递给函数的参数的类数组对象。

this对象是在运行时基于函数的执行环境绑定的,无法在执行期间被复制。全局函数中,this等于window;当函数作为某个对象的方法调用时,this等于那个对象。

call的第一个参数可以用this得到

call的后面的参数可以用arguments得到

f.call(undefined,1,2) 
//undefined是this
//1,2是argument
f = function(){
    console.log(this)
    console.log(arguments)
}

普通模式下,如果thisundefineduse strict严格模式,则thiswindow

如下所示

作用域

每个函数都有自己的执行环境;当代码在一个环境中执行时,会创建变量对象的一个作用域链

var a = 1
function f1(){
    var a = 2
    f2.call(undefined)

    function f2(){
        var a = 3
        console.log(a)
    }
}
f1.call(undefined)
console.log(a)

闭包

如果一个函数使用了它范围外的变量,那么这个函数加上这个变量就是闭包。

闭包是指有权访问另一个函数作用域中的变量的函数

——远方不远

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在js中,函数本身属于对象的一种,因此可以定义、赋值,作为对象的属性或者成为其他函数的参数。函数名只是函数这个对象...
    bjhu电net阅读 553评论 0 5
  • 函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。 概述 函数的声明 JavaSc...
    oWSQo阅读 1,312评论 0 4
  • JavaScript 函数定义 JavaScript 使用关键字 function 定义函数。函数可以通过声明定义...
    鹿守心畔光阅读 462评论 0 1
  • 在过去,我一直认为领导力是随着时间以及阅历日积月累的结果,很感谢朋友推荐我樊登的《可复制领导力》。 我属于执迷提高...
    江子牙的鱼塘阅读 388评论 2 2
  • 刘同说,“谁的青春不迷茫?”,似乎说谁的青春不迷茫,谁就没拥有过青春似的,又似乎说只有在青春之际会迷茫一般,我倒是...
    商淮阅读 376评论 1 1