JS第二周——day2

89 阅读4分钟

1、自定义函数(*****)

1、如何使用:

①*创建/定义/声明函数&返回结果:2种

a、*声明方式:用function关键字进行声明 - 并不是人人都有声明方式,只有个别人才有,而且声明方式一定是最简单的

只有3个具有声明方式:变量、常量、函数,其余人最简单的方式也是直接量

	        function 函数名(形参,...){
			   函数体
			   return 返回值;
	        }

b、直接量方式:

		var 函数名=function(形参,...){
			   函数体
			   return 返回值;
	        }	
		函数名其实也是一个变量名		
		

2、调用函数&接住结果

	var result=函数名(实参,...);

解释:return:本意退出函数,但是如果后面跟着一个数据,则可以将数据返回到全局作用域中,但是仅负责返回,不负责保存,所以我们需要自己创建一个变量接住函数调用的结果

return只能写一次,而且最好写在函数体的后面

何时使用:并不是任何时候都需要加return:

1、全局想要使用局部的

2、调用完函数还希望拿到函数的结果在后续还要做操作时

3、如果没有return,其实也有默认返回值undefined

2、***作用域:2个

1、全局作用域:全局变量 和 全局函数,在任何位置都可以访问/使用

2、函数/局部作用域:局部变量 和 局部函数,只能在当前【函数调用时内部可用】

有了作用域才有变量的使用规则: 优先使用自己的,自己没有找全局,全局都没有报错

强烈建议:千万不要对未声明的变量直接赋值,导致全局污染;所有的变量在使用之前都一定要先var,不能对着没有var变量直接赋值

哪些属于局部变量:2部分

①、直接在函数作用域中创建的变量;②、形参

3、***声明提前

在程序执行之前,悄悄将var声明的变量和function【声明】的函数,集中提前到当前作用域的顶部,但是赋值留在原地,变量比函数更轻

4、***按值传递:

两个变量之间进行赋值

1、如果传递的是原始类型的值:两个变量之间赋值,做操作,互不影响的 - 其实是复制了一个副本给对方

2、如果传递的是引用类型的对象:Array、Function(两个变量之间赋值,做操作,是会相互影响的 - 因为两个用的是同一个地址值)

5、预定义的全局函数:

前辈们(实现浏览器的程序员们)提前定义好,我们可以直接在任何位置使用的函数:

1、编码和解码:

问题1:url网址中不允许出现多字节字符,如果出现会导致乱码(没人看得懂)——utf-8编码格式下,一个汉字占3字节

解决:前端工程师需要将用户输入的网址中的中文编码为单字节字符,后端工程师接住前端传来的东西解码为原文

	 编码:var code=encodeURIComponent("str");
	 解码:var 原文=decodeURIComponent(code);

2、isFinite(num):判断num是不是在有效范围之内;

三种情况会为false:分母为0,NaN,Infinity

3、重要的:parseInt/Float()、eval()、isNaN()

6、***分支结构:

根据条件的不同,执行不同的操作

if...else结构

switch...case结构

语法:
  switch(变量/表达式){
	case1:
	操作1;
	break;
	case2:
	操作2;
	break;
	default:
	默认操作;
  }

注意:

1、默认只要满足一条路,会把后面所有的操作全都做完,解决:break:一般放在操作的后面,但是:①、最后default不需要加break, ②、如果连续的多个操作是一样的效果,也可以省略中间部分

2、不带有隐式转换

3、default可以省略不写

if vs switch:

switch:优点:效率相对较高,因为不需要做任何范围判断。 缺点:不能实现范围判断,必须要知道用户有可能输入的结果是什么才能使用

if:优点:实现范围判断。 缺点:效率相对较低