js中的函数(方法)中的变量以及调用函数的三种方式

函数中的变量

  • 局部变量
  • 实例属性
  • 类属性
function Person(age,national){
	this.age = age;
	Person.national = national
	var bb = 0;
}	
这里的this.age = age;是实例属性,也就是对象属性
Person.national = national是类属性,可以与java中的static一起理解
var bb = 0;这个是局部变量
  • 先看类属性和实例属性
function Person(national,age){
	this.age = age;
	Person.national = national;
}
var person1 = new Person("China",12);
console.log(person1.age + " " + Person.national +" " + person1.national);
var person2 = new Person("America",34);
console.log(person1.age + " " + Person.national +" " + person1.national);
console.log(person2.age + " " + Person.national +" " + person1.national);

在这里插入图片描述

  • 输出结果Person.national为类属性,所以它不属于任何的对象,person1.national永远为undedined。其中person1.age这种带点的调用,只能调用对象实例属性,不能调用局部变量,局部变量只能靠内部函数形成闭包,或者返回值。传送给外界。
function Person(age){
	this.age = age;
	var name = "123";
	this.sayName = function(){
		return name;
	}
}
var person = new Person(12);
console.log(person.name+ ","+person.age);
console.log(person.sayName()+","+person.age);

在这里插入图片描述

调用函数的三种方式

1、直接调用函数
function fun(){
	console.log("aaa");
}
fun();

在这里插入图片描述

2、用call方法调用函数
var each = function(array,fn){
	for(var index in array){
		fn.call(null,index,array[index]);
	}
}
each([4,20,3],function(index,ele){
	console.log(index+" " + ele);
})		

在这里插入图片描述

  • 这里面的call可以调用函数的引用,动态调用函数,call的第一个参数可以改变对象的作用域和this的指向,为null时默认为全局作用域。
function Dog(name,age,bark){
	this.name = name;
	this.age = age;
	this.bark = bark;
	this.info = function(){
		return this.name + "的年龄为:"+this.age + ",叫声" + this.bark;
	}
}
var dog = new Dog("旺财",3,"wangwangwang");
function Cat(name,age){
	this.name = name;
	this.age = age;
}
var cat = new Cat("kitty",2);
console.log(dog.info.call(cat));

在这里插入图片描述

  • 这里更好的体现了,改变作用域和this指向。
3、apply方法调用
  • 这个和call是一样得到,就是传递参数的时候是1以数组的形式,对于参数很多的函数调用,很有用。
var each = function(array,fn){
	for(var index in array){
		fn.apply(null,[index,array[index]]);
	}
}
each([4,20,3],function(index,ele){
	console.log(index+" " + ele);
})		

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值