ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript中函数详解

2022-06-30 08:31:15  阅读:121  来源: 互联网

标签:console 函数 JavaScript name 详解 参数 let log


前言

函数实际上是对象,每个函数都是Function类型的实列,和其他引用类型一样Function也有属性和方法

箭头函数

ECMAScript 6新增了使用胖箭头(=>)语法定义函数表达式的能力

let arrowSum = (a, b)=>{
    return a+b;
};

let functionExpressionSum= function(a, b) {
    return a + b;
};

console.log(arrowSum(0,8)); //8
console.log(functionExpressionSum(100, 100)) //200

如果只有一个参数,那也可以不用括号。只有没有参数,或者多个参数的情况下,才需要使用括号

// 两种写法都有效
let double = (x) => {return 2 * x;};
let triple =x=> {return 3 * x;};
// 无参数需要括号
let getRandom = ()=>{return Math.random();};
// 多参数需要括号
let sum = (a, b) => {return a+b;};
// 无效的写法
let multiply = a, b => {return a * b;}; // 报错

函数名

因为函数名就是指向函数的指针,所以它们跟其他包含对象指针的变量具有相同的行为。一个函数可以有多个名称

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

console.log(sum(100,100)); //200
let anotherSum = sum;
console.log(anotherSum(100,100));//200
sum = null;
console.log(anotherSum(100, 100)); //200

使用不带括号的函数名会访问函数指针,而不会执行函数。此时,anotherSum和sum都指向同一个函数。调用anotherSum()也可以返回结果。把sum设置为null之后,就切断了它与函数之间的关联。而anotherSum()还是可以照常调用

ECMAScript 6的所有函数对象都会暴露一个只读的name属性,其中包含关于函数的信息。多数情况下,这个属性中保存的就是一个函数标识符,或者说是一个字符串化的变量名。即使函数没有名称,也会如实显示成空字符串。如果它是使用Function构造函数创建的,则会标识成"anonymous"

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

参数

ECMAScript函数的参数跟大多数其他语言不同。ECMAScript函数既不关心传入的参数个数,也不关心这些参数的数据类型。定义函数时要接收两个参数,并不意味着调用时就传两个参数。你可以传一个、三个,甚至一个也不传,解释器都不会报错

ECMAScript函数的参数在内部表现为一个数组。函数被调用时总会接收一个数组,但函数并不关心这个数组中包含什么

arguments对象是一个类数组对象(但不是Array的实例),因此可以使用中括号语法访问其中的元素(第一个参数是arguments[0],第二个参数是arguments[1])。而要确定传进来多少个参数,可以访问arguments.length属性

function sayHi(name, message){
    console.log("hello" + name + "," +message);
}

可以通过arguments[0]取得相同的参数值。因此,把函数重写成不声明参数也可以

function sayHi(name, message){
    console.log("hello" + arguments[0] + "," +arguments[1]);
}

在重写后的代码中,没有命名参数。name和message参数都不见了,但函数照样可以调用。这就表明,ECMAScript函数的参数只是为了方便才写出来的,并不是必须写出来的。与其他语言不同,在ECMAScript中的命名参数不会创建让之后的调用必须匹配的函数签名。这是因为根本不存在验证命名参数的机制

通过arguments对象的length属性检查传入的参数个数

function howManyArgs(){
    console.log(arguments.length);
}

howManyArgs("string", 100) //2
howManyArgs();  //0
howManyArgs(12) //1





标签:console,函数,JavaScript,name,详解,参数,let,log
来源: https://www.cnblogs.com/holychan/p/16425555.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有