javascript函数学习
javascript函数学习
函数定义
javascript使用关键字function定义函数
可以是声明定义,也可以是表达式
函数声明
function functionName(parameters) {
执行的代码
}函数声明会在我们调用的时候执行
函数表达式
//函数表达式
//特点:没有函数名,直接赋值给变量
let f=function (a,b){
return a*b;
}在函数表达式储存在变量后,变量也可以作为函数使用
函数提升(Hoisting)
提升(Hoisting)是Javascript默认将当前作用域提升到前面去的行为。
提升(Hoisting)应用在变量的声明与函数的声明。
使用表达式定义函数时无法提升
console.log(myFunction(5));
function myFunction(y) {
return y * y;
}自调用函数
//自调用函数
//自己调用自己,没有函数名,没有参数
(function (){
console.log('hello,我是自调用函数');
})();函数是对象
在 JavaScript 中使用 typeof 操作符判断函数类型将返回 "function" 。
但是JavaScript 函数描述为一个对象更加准确。
JavaScript 函数有 属性 和 方法。
arguments.length 属性返回函数调用过程接收到的参数个数:
function myFunction(a, b) {
return arguments.length;
}typeof myFunction //返回functiontoString()方法将函数作为一个字符串返回:
function myFunction(a, b) {
return a * b;
}
var txt = myFunction.toString();箭头函数
箭头函数的语法比传统的函数定义更加简洁,它使用箭头符号 => 来定义函数,并省略了 function 关键字。
箭头函数的语法
1.基本语法
const add=(a,b)=>a+b;2.单参数省略括号
如果箭头函数只有一个参数,可以省略参数列表中的圆括号。
const square = x=>x*x;3.无参数使用空括号
如果箭头函数没有参数,需要使用空括号{}来表示。
const greet=()=>console.log('hello');4.多语句使用花括号
如果箭头函数的函数体包含多条语句,需要使用花括号{}将函数体括起来,并且需要使用return关键字返回结果。
const sum = (a, b) => {
const result = a + b;
return result;
};箭头函数的特性
箭头函数具有以下特性:
- 简洁的语法: 箭头函数的语法比传统的函数定义更加简洁,可以减少代码量,提高代码可读性。
- 隐式返回值: 如果箭头函数的函数体只有一条语句,并且该语句是表达式,则可以省略 return 关键字,箭头函数会隐式地返回该表达式的结果。
- 词法作用域: 箭头函数没有自己的 this 绑定,它会继承其词法作用域中的 this 值。
- 不支持 arguments 对象: 箭头函数没有 arguments 对象,可以使用剩余参数 ...args 来获取所有参数。
- **不支持new关键字:**箭头函数不能作为构造函数使用,不能使用 new 关键字来创建对象。
原文链接:https://blog.csdn.net/weixin_63490470/article/details/141232015
JavaScript函数参数
参数规则
JavaScript 函数定义显式参数时没有指定数据类型。
JavaScript 函数对隐式参数没有进行类型检测。
JavaScript 函数对隐式参数的个数没有进行检测。
函数显式参数(Parameters)
函数显式参数在函数定义时列出
functionName(parameter1, parameter2, parameter3) {
// 要执行的代码……
}可以自带参数
function myFunction(x, y = 10) {
// y is 10 if not passed or undefined
return x + y;
}
myFunction(0, 2) // 输出 2
myFunction(5); // 输出 15, y 参数的默认值若是在调用时没有提供参数
function f(a,b){
console.log(a);
console.log(b);
}
f(1);
//输出
//1
//undefined隐式参数(Arguments)
JavaScript 函数有个内置的对象 arguments 对象。
arguments 对象包含了函数调用的参数数组。
通过这种方式你可以很方便的找到最大的一个参数的值:
x = findMax(1, 123, 500, 115, 44, 88);
function findMax() {
var i, max = arguments[0];
if(arguments.length < 2) return max;
for (i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}传递参数
通过值传递参数
在函数中调用的参数是函数的隐式参数。
JavaScript 隐式参数通过值来传递:函数仅仅只是获取值。
如果函数修改参数的值,不会修改显式参数的初始值(在函数外定义)。
隐式参数的改变在函数外是不可见的。
let a=10;
let b=20;
function f(a,b){
a = a*a;
b=b*b;
}
console.log(a, b);//10 20通过对象传递参数
在JavaScript中,可以引用对象的值。
因此我们在函数内部修改对象的属性就会修改其初始的值。
修改对象属性可作用于函数外部(全局变量)。
修改对象属性在函数外是可见的。
let h={
a:10,
b:20
}
function f(c){
c.a = c.a*c.a;
c.b = c.b*c.b;
}
f(h);
console.log(h.a, h.b);//100 400函数闭包
function counter(init_value=0){
let count_value=init_value;
function add(){//计数值加一,并返回计数值
count_value++;
return count_value;
}
return add;//返回内嵌函数
}
add_count = counter(10);//获得计数器
add_count();//+1
add_count();//+1
console.log(add_count());//+1 返回13内嵌函数add()
内部函数add()可以访问函数上一层作用域的计数器的值count_value
闭包是一种保护私有变量的机制,它在函数执行时创建一个私有作用域,从而保护内部的私有变量不受外界干扰。
直观地说,闭包就像是一个不会被销毁的栈环境。