七、深入JavaScript函数,对象和作用域(三)
@Author:Runsen
@Date:2020/5/26
作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件。导致翘课严重,专业排名中下。.在大学60%的时间,都在CSDN。决定今天比昨天更加努力。
函数
函数:就是将一些功能或语句进行封装,在需要的时候,通过调用的形式,执行这些语句。函数就是工具,写成函数看起来比较高大上。
比如,下面的sayHello函数。
console.log("Runsen,你好");
sayHello(); // 调用函数
// 定义函数
function sayHello(){
console.log("欢迎,Runsen");
console.log("welcome");
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
因此,在
function 函数名([形参1,形参2...形参N]){ // 备注:语法中的中括号,表示“可选”
语句...
}
- 1
- 2
- 3
比如下面的求和函数
function sum(a,b){
return a+b;
}
var result=sum(2,3);
console.log(result);//输出5
- 1
- 2
- 3
- 4
- 5
对象
在JavaScript中, 一切皆是对象,函数也可以用一个对象来代表:Function,我们可以使用Function来创建对象:
创建自定义对象最简单的方式就是创建一个Object实例, 然后添加属性和方法
/ 1.创建person的对象
var person = new Object()
// 2.给person对象赋值了一些动态的属性和方法
person.name = "Runsen"
person.age = 20
person.height = 65
person.sayHello = function () { alert("Hello, My name is " + this.name)
}
// 3.调用方法, 查看结果
person.sayHello()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
但是如果需要创建多个对象,应该使用工厂方法创建对象,大批量的创建对象,其实就是定义一个函数
/*
* 使用工厂方法创建对象
* 通过该方法可以大批量的创建对象
*/
function createPerson(name, age, gender) { //创建一个新的对象 var obj = new Object(); //向对象中添加属性 obj.name = name; obj.age = age; obj.gender= gender; obj.sayHello = function() { console.log("Hello, My name is " + this.name); }; //将新的对象返回 return obj;
}
var obj2 = createPerson("Runsen的朋友", 20, "男");
obj2.sayHello();
var obj3 = createPerson("Runsen的兄弟", 20, "男");
obj3.sayHello();
var obj4 = createPerson("Runsen以后的女朋友", 20, "女");
obj4.sayHello();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
但是上面创建的对象都是Object这个类型,就导致无法区分出多种不同类型的对象。因此,最好的方法就是使用this上下文对象。
<script>
function createPerson(name, age, gender) { //向对象中添加属性 this.name = name; this.age = age; this.gender = gender; this.sayHello = function() { console.log("Hello, My name is " + this.name); }; }
var obj2 = new createPerson("Runsen的朋友", 20, "男");
obj2.sayHello();
var obj3 = new createPerson("Runsen的兄弟", 20, "男");
obj3.sayHello();
var obj4 = new createPerson("Runsen以后的女朋友", 20, "女");
obj4.sayHello();
</script>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
作用域
作用域指一个变量的作用范围。在js中,一共有两种作用域:
-
全局作用域
-
函数作用域
全局作用域
在全局作用域中:
-
创建的变量都会作为window对象的属性保存。
-
创建的函数都会作为window对象的方法保存。
全局作用域中的变量都是全局变量,在页面的任意的部分都可以访问的到。
var carName = " Volvo";
// 此处可调用 carName 变量
function myFunction() { // 函数内可调用 carName 变量
}
- 1
- 2
- 3
- 4
- 5
- 6
局部作用域
变量在函数内声明,变量为局部作用域。
局部变量:只能在函数内部访问。
// 此处不能调用 carName 变量
function myFunction() { var carName = "Volvo"; // 函数内可调用 carName 变量
}
- 1
- 2
- 3
- 4
- 5
- 6
参考菜鸟教程
下面是我的总结;
在function内部, 加var的是局部变量, 不加var的则是全局变量;
在function外部, 不管有没有使用var声明变量,都是全局变量,在function外部,var关键字一般可以省略,但是为了书写规范和维护方便以及可读性好,一般不建议省略var关键字。
例子
var a = 1;
function foo() { console.log(a); a = 2; // 此处的a相当于window.a
}
foo();
console.log(a); //打印结果是2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如果在function内部, 加var
function foo() { var a = 1; console.log(a); //1 a = 2; console.log(a); //2
}
foo();
// console.log(a); //a is not defined
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
文章来源: maoli.blog.csdn.net,作者:刘润森!,版权归原作者所有,如需转载,请联系作者。
原文链接:maoli.blog.csdn.net/article/details/106351349
- 点赞
- 收藏
- 关注作者
评论(0)