欢迎光临
我们一直在努力

函数的补充详细解析

函数的返回值return

返回值语法结构

function 函数名(){

return 需要返回的结果

}

函数名()

返回值注意事项

  • 在函数中,return之后的语句就都不会执行,有终止函数的作用
  • return只能返回一个值,多个值,返回的是最后一个值。如果有需求返回多个值,可以将多个值放入数组或者对象里
  • return后可以跟任意类型的值
  • 如果return后不跟任何值,就相当于返回一个undefined
  • 如果函数中不写return,则也会返回undefined

// 需求:创建一个函数,用来计算三个数的和
function sum(a, b, c) {
var d = a + b + c;
//console.log(d);
//alert(d);
return d;
}
//调用函数,变量result的值就是函数的执行结果
var result = sum(4, 7, 8);
//函数返回什么,result的值就是什么
console.log("result=" + result);

返回值类型

返回值可以是任意的数据类型, 也可以是一个对象 ,函数

//1:返回值对象
function fun2() {
//return 10;
var obj = { name: "沙和尚" }
return obj;//return {name:"沙和尚"}
}
var a = fun2();
console.log("a=" + a);

//2:返回值是函数
function fun3() {
//在函数内部还可以声明一个函数
function fun4() {
alert("我是fun4");
}
//将fun4函数作为返回值返回
return fun4;
}
a = fun3();//将箱子里的冰淇机器赋值,也就是fun4
a=fun3;//与上面的区别,整个fun3函数赋值
console.log(a);

break、continue、return的区别

  • break:结束当前的循环体(for、while)
  • continue:跳出本次循环,继续执行下次循环(for、while)
  • return:结束当前循环体,return后的语句不会执行, return函数的结果

function fun() {
alert("函数要执行了~~~");
for (var i = 0; i < 5; i++) {
if (i == 2) {
break;//退出当前的循环
continue;//用于跳过当次循环
return;//使用return可以结束整个函数
}
console.log(i);
}
alert("函数执行完了~~~");
}
//fun();

arguments的使用

在调用函数时,浏览器每次都会传递两个隐含的参数:

1:函数的上下文对象 this

2:封装实参的对象 arguments

(1)、arguments 是一个类(伪)数组对象

它可以通过索引来操作数据,通过arguments.length可以获取实参的长度获取长度

伪数组并不是真正意义上的数组

  •         具有数组的length属性
    • 它没有真正数组的一些方法
    • 按照索引的顺序进行存储的

(2)、在调用函数时,我们所传递的实参都会在arguments中保存

(3)、我们即使不定义形参,也可以通过grguments来使用实参,只不过比较麻烦

             arguments[0]表示第一个实参

             arguments[1]表示第二个实参

(4)、arguments有个属性叫callee

这个属性对应一个函数对象,就是当前正在指向函数的对象

function fun() {
//这两种都是检查arguments是不是数组
//console.log(arguments instanceof Array);//false
//console.log(Array.isArray(arguments));//false
//console.log(arguments.length);//用来获取实参的长度
//console.log(arguments[0]);//hello
console.log(arguments.callee);//指向当前这个对象
}
fun("hello", true);

如何获取到伪数组?

第一种方式:arguments

第二种方式:dom获取多个标签时,拿到就是伪数组

函数方法call()、apply()、bind()

面试题:call()、apply()、bind()的区别

(1)这三个方法都是函数对象的方法,需要通过函数对象来调用

(2)当对函数调用call()和apply()方法时,都会调用函数执行,当函数调用bind()方式,会返回当前函数,需要手动调用

(3)在调用call和apply(),bind()可以将一个对象指定为第一个参数, 此时这个对象将会成为函数执行中的this

(4)call()、bind()方法传递函数的其他参数,需要一个个传,apply()方法需要将实参封装到一个数组中统一传递

var name = "我是window";
function fun(a) {
console.log("a=", a);
alert(this.name);
}
var obj = {
name: "我是obj1",
sayName: function () {
alert(this.name);
},
};
var obj2 = {
name: "我是obj2",
};
//obj.sayName(); //obj
//obj.sayName.call(obj2);//obj2
//fun.call(obj, 2);//obj1,2
//fun.apply(obj2, [2,3]);
//fun(1);

总结this的情况

1.以函数直接调用时,this是window

2.以对象的方法调用时,this是调用方法的对象

3.以构造函数的形式调用时,this是新创建的那个实例对象

4.使用call和apply,bind调用时,this是指定的那个对象,如果不写第一参数,默认是window

函数调用函数

一个函数只做一件事

立即执行函数

语法结构:函数对象()

立即执行函数,函数定义完后,立即被调用,立即调用函数,往往只会执行一次

//第一种写法
(function(){
alert("我是一个匿名函数~~~");
})();//外面的()是把整个函数当作函数名,后面的()是调用函数的意思
//第二种写法
(function () {
alert('匿名函数执行方式二')
}());
//匿名函数传参
(function(a,b){
console.log("a="+a);
console.log("b="+b);
})(123,456);//不仅可以调用,还可以传值

赞(0)
未经允许不得转载:171主机测评 » 函数的补充详细解析
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址