JavaScript踩坑笔记05---全局变量、局部变量、自由变量、静态变量、静态方法

全局变量、局部变量:

JavaScript解释器在执行任何代码之前会先创建一个全局对象(global object),全局变量就是相当于这个全局对象的一个属性。
JavaScript中的全局对象为window,在它下面定义的变量为全局变量,一般定义在最外层的作用域中。
举例说明。

// 定义在最外层的作用域,全局变量
var num = 11;

function fn(aaa) {
	// 定义在函数内,局部变量
	var str = "JavaScript";
	// 参数aaa的作用域在函数内,所以也是局部变量
	console.log(aaa);
}

自由变量:

自由变量是相对而言的。
子作用域内可以取到父作用域内的变量,这个变量相对子作用域而言,就是自由变量。
举例说明。

// 定义在最外层的作用域,全局变量
var num = 11;

function fn() {
	// num是父作用域的变量,相对于函数fn来说,他就是自由变量
	console.log(num);
}

静态变量:

静态变量即为某个类所拥有的属性,通过“类名.静态变量名”的方式访问该属性。
举例说明。

// 定义Person的构造函数
function Person(name, age) {
	this.name = name;
	this.age = age;
}

// 此时gender属性为静态变量
Person.gender = "男";
// 通过new关键字生成一个Person实例
var tom = new Person("tom", 11);

console.log(Person.gender); // 男
console.log(tom.gender); // undefined

// 修改静态变量gender
Person.gender = "女";
console.log(Person.gender); // 女

通过以上例子说明,静态变量不能通过“实例.静态变量名”调用,只能通过“类.静态变量名”调用。

静态方法:

同理,静态方法为某个类所拥有的方法,通过“类名.静态方法名”的方式调用该方法。
举例说明。

// 定义Person的构造函数
function Person() {
	this.sayHello = function () {
		console.log("Hello");
	};
}

// 此时fn方法为静态方法
Person.fn = function () {
	console.log("静态方法");
};
// 通过new关键字生成一个Person实例
var tom = new Person("tom", 11);

Person.fn(); // 静态方法
// tom.fn(); // TypeError: tom.fn is not a function

// 修改静态方法fn
Person.fn = function () {
	console.log("静态方法已被修改");
};
Person.fn(); // 静态方法已被修改

通过以上例子说明,静态方法不能通过“实例.静态方法名”调用,只能通过“类.静态方法名”调用。


个人学习总结,欢迎批评指正

猜你喜欢

转载自blog.csdn.net/qq_43738157/article/details/84537525