创建函数

  创建函数的方式有两种:1、函数声明,2、函数表达式

  函数声明的语法为

functionName();  //不会报错,函数声明提升
function functionName(arg0,arg1,arg2) {
//do somethings;
}
alert(functionName.name);  //输出 functionName

  也可以采用函数表达式创建函数

functionName();  //会报错,此时 functionName 仅仅是 var functionName,其值为 undefined;
var functionName = function(arg0,arg1,arg2) {
//do somethings;
}
alert(functionName.name);  //输出 ""

  


  递归

  当一个函数可以通过名字调用自身,说明该函数为 递归函数.

  

function functionName() {
// do somethings;
return functionName();
} var another = functionName;
functionName = null; another(); //报错, 因为找不到 functionName(); function functionName() {
// do somethings;
return arguments.callee(); //指向该函数的指针
} var another = functionName;
functionName = null; another();  //不报错.

  


  闭包

  了解闭包,首先了解函数的作用域。

  函数作用域里的变量,会一级级的向上查找变量,直到找到为止,找不到则报错.

var a = 1;
function getA(){
alert(a);  //当在当前作用域找不到变量时,会去父作用域查找该变量,直到找到为止,如果找不到,则报错.
}
getA(); //1;

  但是,函数作用域外的变量,则访问不到函数作用域里的变量。

function setA(){
var a = 1;
}
setA();
alert(a); //报错.因为变量 a 不能访问到 setA 里的变量,且外部也没有 变量a

  创建一个闭包函数,来访问函数里的值。

var a = 5;
function func(){
  var a = 1;
  return {
    "get":function(){
      alert(a);
    },
    "set":function(num){
      a=num;
    },
    "getthis":function(){
      alert(this.a);
    }
  }
} var a = func();  //闭包
a.get();  //输出 1;
a.set(2);
a.get();  //输出 2; var b = func();  //闭包
b.get();  //输出 1;
a.set(3);
b.get();  //输出 1;
a.get();  //输出 3;

  由上个例子可见,闭包会造成内存占用比以前更多。因此要谨慎使用闭包。


 模仿块级作用域

  由于 JavaScript 没有块级作用域,会导致有些时候会出差错,得不到我们想要的结果。

function func() {
  var i = 5;
for (var i =0;i<10;i++) {
//alert(i);
}
alert(i); //输出10; 并不是我们想要的10;
}

  因此 可以利用 立刻执行的匿名函数,来模拟块级作用域。

function func() {
var i = 5;
(function(){
for (var i = 1;i < 10;i++) {
//alert(i);
}
}());
alert(i); //输出 5
}

  


  

JavaScript Function(函数表达式)的更多相关文章

  1. javascript:function 函数声明和函数表达式 详解

    函数声明(缩写为FD)是这样一种函数: 有一个特定的名称 在源码中的位置:要么处于程序级(Program level),要么处于其它函数的主体(FunctionBody)中 在进入上下文阶段创建 影响 ...

  2. JavaScript function函数种类(转)

    转自:http://www.cnblogs.com/polk6/p/3284839.html JavaScript function函数种类 本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通 ...

  3. JavaScript function函数种类介绍

    JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) {     ...

  4. JavaScript Function 函数深入总结

    整理了JavaScript中函数Function的各种,感觉函数就是一大对象啊,各种知识点都能牵扯进来,不单单是 Function 这个本身原生的引用类型的各种用法,还包含执行环境,作用域,闭包,上下 ...

  5. 谈谈javascript的函数表达式及其应用

    我们都知道定义函数的方式有两种,一种是函数声明,另外一种就是函数表达式. 函数声明 语法为:function关键字后跟函数名.例如: function functionName(arg0) { //函 ...

  6. 【JavaScript】函数表达式

    一.前言        接着上一篇的内容,继续学习JavaScript. 二.内容       函数的声明 function functionName(arg0,arg1,arg2){ //函数体 } ...

  7. 浅谈JavaScript的函数表达式(闭包)

    前文已经简单的介绍了函数的闭包.函数的闭包就是有权访问另一个函数作用域的函数,也就是函数内部又定义了一个函数. var Super=function(num){ var count=num; retu ...

  8. JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》

    函数表达式的特征 使用函数实现递归 使用闭包定义私有变量 前面我们说到定义函数有两种方式:函数声明.函数表达式. 两者的区别在于函数声明提升,前者在执行之前的上下文环境中直接被赋值,而后者不会. 一. ...

  9. 浅谈JavaScript的函数表达式(递归)

    递归函数,在前面的博客中已经简单的介绍了.递归函数是一个通过函数名称在函数内部调用自身的函数.如下: function fac(num){ if(num<1){ return 1; } else ...

随机推荐

  1. RedHad中yum安装与使用

    yum的安装对于linux来说,是一个福音,至少安装软件来说,非常非常方便,以前使用rpm安装,那个各种依赖,哎,说多了都是泪,现在有这个yum就方便多了. 此处记录redhad的安装.其实我也是借鉴 ...

  2. Android 布局优化

    转载自stormzhang的博客:http://stormzhang.com/android/2014/04/10/android-optimize-layout/ < include /> ...

  3. 12-8 php基础

    <?php //单行注释/* 多行注释*/ //弱类型语言//var a = 10;/*$a=10;$b = "hello";var_dump($a);$a="wo ...

  4. day5--<装饰器、模块、字符串格式化、生成器、迭代器>logging模块

    本节大纲: 一:双层装饰器:一个函数可以被多层装饰器进行装饰,函数渲染(编译)从下到上,函数执行从上到下.如下程序: #!/usr/bin/env python #-*-coding:utf-8-*- ...

  5. python数据结构与算法——栈

    # 栈# 其实python里面的list就可以当栈使用啦,用collections.deque也可以# 1. 入栈 list.append(item)# 2. 出栈 item = list.pop() ...

  6. vim替换指令备忘

    1.  替换当前行中的内容: :s/from/to/    (s即substitude) :s/from/to/     :  将当前行中的第一个from,替换成to.如果当前行含有多个        ...

  7. andriod学习之一

    今天安装了Android Studio, 但PinyinIME没有导入成功.然后看了Android的一些基础. 知道了Android的基本组件: Activity,服务,内容提供程序,广播接收器. 大 ...

  8. 【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! Unity3D有什么优势 Unity3D是一个跨 ...

  9. 自动选中div中的文字

    <html> <head> <title></title> <script type="text/javascript" de ...

  10. 电子面单纸打印时固定高度18cm,到底是多少px

    点评:A4纸竖向打印,html网页页面的宽度设置成多少?这个问题是我们大家所疑惑的,于是网上搜集整理下,希望可以帮助你们 最近开发项目时遇到了网页打印的问题,这是问题之二,打印宽度设置 在公制长度单位 ...