《JavaScript高级程序设计》 您所在的位置:网站首页 jquery第十章 《JavaScript高级程序设计》

《JavaScript高级程序设计》

#《JavaScript高级程序设计》| 来源: 网络整理| 查看: 265

第十章:函数

实际上函数也是对象,每个函数都是对象Function的实例,其也拥有属性和方法;

因为函数也是对象,所以函数名则是指向函数对象的指针;

10.1 函数的声明

函数声明式

function sum(num1,num2){ return num1+num2; }

函数表达式

let sum = function(num1,num2){ return num1+num2; }

构造函数式:

let sum = new Function('num1','num2','return num1+num2');

十分不推荐这种写法,因为会解释两次,影响性能。

箭头函数式:

let sum = (num1,num2) => return num1+num2;

箭头函数有如下特点:

如果只有一个参数,可以省略小括号 如果只有一行代码,可以省略大括号 不能使用arguments``super和new.target;也不能使用构造函数、没有prototype属性 this指向定义箭头函数时的上下文作用域 10.2 函数名

因为函数名就是指向函数的指针,所以可以一个函数拥有多个名称;

function sum(num1,num2){ return num1+num2; } let anotherSum = sum; console.log(sum(10,20)); // 30 console.log(anotherSum(10,20)); // 30

在ES6中,所有函数对象都会暴露一个只读的name属性;

function foo() {} let bar = function() {}; let baz = () => {}; let nav = new Function(); console.log(foo.name); // foo console.log(bar.name); // bar console.log(baz.name); // baz console.log((() => {}).name); //(空字符串) console.log(nav.name); // anonymous 10.3 函数参数

与其他语言不一样,ECMAScript函数不关心传入参数的个数;不管少传,还是多传,解释器都不会报错。

主要是因为:参数在内部表现为一个数组;箭头函数除外,可以在函数内部访问arguments对象,从而获取传参、传参个数。

function sayHi(name,message){ console.log(`Hi,${name}!${message}`); } function anotherSayHi(){ console.log(`Hi,${arguments[0]}!${arguments[1]}`); } sayHi('zyzc','welcome'); // Hi,zyzc!welcome anotherSayHi('zyzc','welcome'); // Hi,zyzc!welcome

与其他语言不同,ECMASCript函数的参数只是方便调用而命名的,而不是必需的;因为根本不存在验证命名参数的机制

function getLength(){ console.log(arguments.length); } getLength(); // 0 getLength('zyzc',18); // 2

这里有一个需要注意的地方,arguments对象的值,始终与对应的命名参数同步。

function sum(num1,num2){ arguments[0] = 10; console.log(num1 + num2); } sum(20,20); // 30

但是在严格模式下不会出现这种情况。再者:函数中尝试修改arguments对象会导致语法错误。

"use strict" function sum(num1,num2){ arguments = {}; // Unexpected eval or arguments in strict mode console.log(num1 + num2); } 10.3.1 箭头函数参数

传给箭头函数的参数,不能使用arguments关键字访问;

function foo(){ console.log(arguments[0]); } let bat = ()=>{ console.log(arguments[0]); } foo(5); // 5 bat(5); // {}

但是可以这样做&



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有