首页 > 代码库 > JavaScript学习笔记(一)函数

JavaScript学习笔记(一)函数

function myFunc(theObject) {
  theObject.make = "Toyota";
}

var mycar = {make: "Honda", model: "Accord", year: 1998},
var x, y;

x = mycar.make;     // x获取的值为 "Honda"

myFunc(mycar);
y = mycar.make;     // y获取的值为 "Toyota"
                    // (make属性被函数改变了)

 

函数声明:1.函数名称 2.参数列表 3.函数功能

定义一个函数:

var number = 10;
function square(number){
  number = number*number; return number ; }
var x = square(number);
console.log(number);//10
console.log(x);//100

  函数名 square 

  参数number

  函数功能 返回number^2

   原始参数 和 对象作为参数(上面两组代码为实例)

1.当原始参数作为函数参数的时候,函数内部改变该参数不影响全局或调用函数

2.如果参数为一个对象,Array或者自定义对象,函数内部改变该对象属性,则这样的改变对函数外部可见。

函数表达式

 

/*匿名函数的函数表达式*/
var square = function(number) {
  return number * number
};
var x = square(4);

/*有函数名的函数表达式*/
var factorial = function fac(n) {return n<2 ? 1 : n*fac(n-1)};

console.log(factorial(3));

 

  函数作为参数

function map(f,a) {
  var result = [], // 创建一个新的数组
      i;

  for (i = 0; i != a.length; i++)
    result[i] = f(a[i]);
  return result;
}

  函数f()作为map()函数的参数 

map(function(x) {return x * x * x}, [0, 1, 2, 5, 10]);

  返回 [0, 1, 8, 125, 1000]。

function hoisting即函数提升仅作用于函数声明 不能用于函数表达式

console.log(square(5));
/* ... */
function square(n) { return n*n }

  

console.log(square); // square is hoisted with an initial value undefined.
console.log(square(5)); // TypeError: square is not a function
var square = function (n) { 
  return n * n; 
}

  函数作用域

函数可以访问自己内部定义的变量或者函数,全局可以访问所有在全局作用域中定义的变量或函数 

子函数可以访问父函数内部定义的变量或者其父函数有权访问的其他变量。

作用域和函数堆栈(scope and function stack)

递归(recursion)

一个函数可以指向并调用自身的三种方法:

1.函数名

2.arguments.callee

3.作用域下的一个指向该函数的变量名

嵌套函数和闭包(nested functions and closures)

你可以在一个函数里面嵌套另外一个函数。嵌套(内部)函数对其容器(外部)函数是私有的。它自身也形成了一个闭包(closure)。一个闭包是一个可以自己拥有独立的环境与变量的的表达式(通常是函数)。

既然嵌套函数是一个闭包,就意味着一个嵌套函数可以”继承“容器函数的参数和变量。换句话说,内部函数包含外部函数的作用域。

可以总结如下:

  • 内部函数只可以在外部函数中访问。
  • 内部函数形成了一个闭包:它可以访问外部函数的参数和变量,但是外部函数却不能使用它的参数和变量。

 

JavaScript学习笔记(一)函数