JS随笔:函数

1.函数的声明:


function functionname()
 {
执行代码
 }

创建函数的两种方式:

①静态方式:

function functionname(参数列表){
          内容
             }
②动态方式
var 函数名=new Function(参数列表){
内容
}


2.调用带参数的函数:

function myFunction(var1,var2)
{
代码
 }

在JavaScript中,函数可以嵌套在其他函数里。

如果有同名的参数,则取最后出现的那个值

function f(x,x){
 console.log(x);
}
f(1,2)  // 2

3.HTML增加按钮调用函数

<p>点击这个按钮,来调用带参数的函数。</p>
<button onclick="myFunction('Harry Potter','Wizard')">点击这里</button>
<script>
function myFunction(name,job)
{
	alert("Welcome " + name + ", the " + job);
}
</script>

4.带有返回值的函数:

在使用 return 语句时,函数会停止执行,并返回指定的值

注意: 整个 JavaScript 并不会停止执行,仅仅是函数。JavaScript 将继续执行代码,从调用函数的地方。

函数调用将被返回值取代:

function myFunction()
 {
var x=5;
return x;
}

5.函数内的局部变量:

在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。

您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。

只要函数运行完毕,本地变量就会被删除。

局部变量比同名全局变量的优先级高,所以局部变量会隐藏同名的全局变量。

6.this函数的用法:

   ①调用类自身的变量,方法

   ②调用构造函数分别给不同的变量赋值(当有多个构造函数时)


7.apply方法和call方法:

apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.

Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象

args:这个是数组,它将作为参数传给Function(args-->arguments)

 call:和apply的意思一样,只不过是参数列表不一样.

 Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:这个对象将代替Function类里this对象
params:这个是一个参数列表

 <script type="text/javascript">
 2     /*定义一个人类*/
 3     function Person(name,age)
 4     {
 5         this.name=name;
 6         this.age=age;
 7     }
 8     /*定义一个学生类*/
 9     function Student(name,age,grade)
10     {
11         Person.apply(this,arguments);
12         this.grade=grade;
13     }
14     //创建一个学生类
15     var student=new Student("qian",21,"一年级");
16     //测试
17     alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);
18     //大家可以看到测试结果name:qian  age:21  grade:一年级
19     //学生类里面我没有给name和age属性赋值啊,为什么又存在这两个属性的值呢,这个就是apply的神奇之处.
20 </script>
复制代码

call实例:

将上面appy代码出换成person.call(this,name,age)

③什么时候用call什么时候用apply:

在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数arguments,这个参数是数组类型,并且在调用Person的时候参数的列表是对应一致的(也就是Person和Student的参数列表前两位是一致的) 就可以采用 apply , 如果我的Person的参数列表是这样的(age,name),而Student的参数列表是(name,age,grade),这样就可以用call来实现了,也就是直接指定参数列表对应值的位置(Person.call(this,age,name,grade));

参考:点击打开链接

8.如何在js中构建类:

参考:点击打开链接

9.arguments:

当调用函数时,传入的实参个数超过函数定义时的形参个数时,是没有办法直接获得未命名值的引用。

这时,标识符arguments出现了,其指向实参对象的引用,实参对象是一个类数组对象,可以通过数字下标来访问传入函数的实参值,而不用非要通过名字来得到实参。

function go(x){   
  console.log(arguments[0]);   
  console.log(arguments[1]);  
}  
go(1,2);  
//1
//2

arguments可以看做类似于储存形参的数组,他有着length属性

10.eval命令

eval命令的作用是,将字符串当作语句执行。



猜你喜欢

转载自blog.csdn.net/qq_40259565/article/details/80260156