第十四节:函数

第十四节:函数

概述:JavaScript中的函数,类似于Java中的方法,但是 JavaScript中的函数可以赋值给对象(变量)

函数命名:建议使用动词开头,并使用驼峰命名法

作用:封装方法

3.3.1 函数的定义及调用语法

函数的形参和实参是一 一对应的

  • 函数的形参:函数定义时 小括号内的 变量值

  • 函数的实参:值的是 函数调用时 小括号内的 变量值

函数的返回值:通过 return 返回

  • return 返回的值,就是函数调动之后得到的值

函数的参数和返回值,不是必须要加的,根据需求来定

  • 参数需不需要?
    • 取决于函数体依赖于这个参数,外部需不需要是用这个变量
  • 返回值需不需要?
    • 函数调用是否要得到数据,需要 在函数体加上 return, 不需要就不加 return
普通函数
// 定义函数格式: 
function 函数名(形参1, 形参2...) {
	return 返回值;
}
// 调用函数格式: 
函数名或变量名(实参1, 实参2...);


// 定义函数(无返回值)
function getSum(a, b) {
    alert(a + b);
}
// 调用函数
getSum("abc","cba");			// abccba
getSum("10", 20);				// 1020


// 定义函数(有返回值)
function getSum() {
    return a - b;
}
// 调用函数
var v1 = getSum("abc", "cba");
alert(v1);						// NaN
匿名函数

匿名函数没有名字, 可以定义一个变量来接收, 使用时调用变量, 传入参数即可

// 格式: 
function(变量名1, 变量名2...) {
	return 返回值;
}

// 定义函数(无返回值) 	
var func1 = function(a, b) {
    alert(a + b);
}
// 调用函数
func1(10, 20);					// 30


// 定义函数(有返回值)
var func2 = function(a, b) {
    return a - b;
}
// 调用函数
alert(func2("30", 15));			// 15
扩展: 匿名函数的特殊调用方式
// 调用格式: 
(匿名函数(函数的参数列表的实参值));

// 调用无返回值的方法
(function(a, b) {
    alert(a + b);
} (100, 200));

// 调用有返回值的方法
alert((function(a, b) {
    return a - b;
} (30, 15)));

3.3.2 arguments 伪数组

arguments 是伪数组,可以遍历,可以通过下标访问数据

作用:获取到所有的实参

大白话解释:访问形参,并遍历实参

可以解决的问题:当函数的形参个数不确定时,通过 arguments 伪数组 拿到所有参数

访问形参:
console.log(Arguments);
遍历实参:
// 定义函数
function getSum() {
	var sum = 0;
	for (var i=0; i < arguments.length; i++) {
		console.log(arguments[i]);	// 20, 30, 40, 50, 60
	}
}

// 调用函数
var sum = getSum(20, 30, 40, 50, 60);
// 定义函数
function getSum() {
    var sum = 0;
    for (var i=0; i < arguments[0].length; i++) {
        console.log(arguments[0][i]);	// 20, 30, 40, 50, 60
    }
}

// 调用函数
var sum = getSum([20, 30, 40, 50, 60]);
函数 rest …

可以简写 arguments

… 把伪数组转成 数组,可以使用数组的方法

// args 为自定义变量名
function fn(...args) {
    args.push('张三');
    console.log(args);	// 40, 298, 303, '张三';
}

fn(40, 298, 303);

3.3.3 作用域

概述:ES5 没有块级作用域

{
   let num = 200;
   console.log(num);
}
作用域链

先在函数体中找局部变量,没有则在外面找全局变量

var num = 100;

function fn() {
   var num = 200;
   alert(num);
}

fn();   // 200;

3.3.4 let 关键字
3.3.5 预解析

变量声明提升,变量赋值不提升

当函数和变量同名时,预解析优先级为:函数 > 变量

fn();   // 200;

var fn = function () {
   alert(100);
}

function fn () {
   alert(200);
}
var num = 10;
console.log(num);    // 10;

console.log(num);    // undefined;
var num = 10;

// var num = 10;
console.log(num);    // 报错(未定义变量);
局部变量 和 全局变量

逗号隔开的都是局部变量;
等号隔开的除了第一个,其余都是全局变量

var a = b = c = 9;
// a 是局部变量,b, c 是全局变量

var a, b, c = 9;
// a, b, c 是局部变量
f1();

console.log(a);
console.log(b);
console.log(c);
function f1() {
   var a = b = c = 9;
   console.log(a);
   console.log(b);
   console.log(c);
}

// 注意:a 是局部变量,b, c 是全局变量

结果:a 报错,b, c 为 9
	 函数体内 都为 9
fn();   // 100;
function fn() {
   alert(100);
}

fn();   // 报错;
var fn = function () {
   alert(100);
}

fn;   // 未定义;
var fn = function () {
   alert(100);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤安先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值