七、深入JavaScript函数,对象和作用域(三)

举报
毛利 发表于 2021/07/15 04:00:58 2021/07/15
【摘要】 @Author:Runsen @Date:2020/5/26 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件。导致翘课严重,专业排名中下。.在大学60%的时间,都在CSDN。决定今天比昨天更加努力。 文章目录 函数对象作用域全局作用域局部作用域例子 函数 函数:就是将一些功能或...

@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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。