6-JS函数(二)

函数


函数的实参和形参

function    temp (a,b){ console.log(a) };  // a , b为两个形参
var  a1 = 2;
var b1 = 3;
temp(a1,b1);     //a1 , b1为两个实参
  • 当调用函数的时候传入的实参比函数声明指定的形参个数要少,剩下的形参都将设置为undefined.
  • 在函数体内,我们可以用标识符arguments来访问传入函数的实参值。实参对象是一个类数组对象(拥有一个数值length属性和对应非负整数属性的对象看做一种类型的数组),这样可以通过数字下标来访问。

函数prototype

每一个函数都包含一个prototype属性,这个属性是指向一个对象的引用,这个对象称为“原型对象”(prototype object)。每一个函数都包含不同的原型对象。当将函数用作构造函数的时候,新创建的对象会从原型对象上继承属性。

function Counter(){
    this.add=function(a,b){
      console.log(a+" + "+b+" = "+ (a+b));
    };
};

Function.prototype.minus = function(a,b){
  console.log(a+" - "+b+" = "+(a-b))
};

Object.prototype.multiply = function(a,b){
  console.log(a+" * "+b+" = "+a*b)
};
Counter.prototype.devide = function(a,b){
console.log(a+" / "+b+" = "+a/b);
};

function Example(){
};

var temp = new Counter();
var temp2 = Counter;
var temp3 = Object.create(temp);

temp3.add(1,5);
temp.add(1,3);
temp2.multiply(1,3);
temp.devide(3,2);
console.log("add" in temp);
console.log("minus" in temp);
console.log("multiply" in temp);
console.log("devide" in temp);

 1 + 5 = 6
 1 + 3 = 4
 1 * 3 = 3
 3 / 2 = 1.5
 true
 false
 true
 true

函数作用域

  • 1.JS的变量作用域是函数级的。
  • 2.JS编程环境的顶级作用域是window对象下的范围,称为全局作用域,全局作用域中的变量称为全局变量。
  • 3.JS函数内的变量无法在函数外面访问,在函数内却可以访问函数外的变量,函数内的变量称为局部变量。
  • 4.函数可以嵌套,多个函数的层层嵌套构成了多个作用域的层层嵌套,形成了JS的作用域链。
  • 5.JS作用域链的变量访问规则是:如果当前作用域内存在要访问的变量,则使用当前作用域的变量,否则到上一层作用域内寻找,直到全局作用域,如果找不到,则该变量为未声明。

代码示例

var a = 1;
var c = 3;
function example(a){
   var a = 3;
   b = 2;
   console.log("a="+a);
}
example(2);

function example2(c){
    console.log("b="+b+",c="+c);
}
example2(4);

function example3(d){
    var d = 4;
    return function example4(){
      console.log("d="+d);
    }
}
var temp = example3();
temp();

 a=3 
 b=2,c=4
 d=4
posted @ 2017-01-04 22:48  shelfy  阅读(125)  评论(0编辑  收藏  举报