JavaScript函数部分补充

之前说了函数的调用,现在再来说说函数的另外几个重要概念:

闭包:函数内部可以访问函数外部的变量,函数外部不能访问函数外部的变量。为了打破这种“不公平”,就产生了闭包。

首先看一个简单的例子:

var fun1= function () {
            var m=10;
            var inFun= function () {
                return m;
            }
            return inFun;
        }
        var f=fun1();
        alert(f());

这就是一个最基本的闭包例子了,在这个例子中,闭包可以理解成为是java中的get函数,用来得到对象内部的属性的。

上面例子的另一种变体是这样的,但是我个人不是很喜欢这么用。

   var fun1= function () {
            var m=10;
            var inFun= function () {
                alert(m);
            }
            inFun();
        }
        fun1();  

因为容易写成这样子:

        var fun1= function () {
            var m=10;
            var inFun= function () {
                return m;
            }
            inFun();
        }
        alert(fun1());

但是,闭包除了上面例子的作用外,还有另外的功能,有时候我们的要求总是会很多,除了访问外,我们还希望对函数内部的变量进行修改,再看下面的例子。

        var fun1= function () {
            var m=10;
            var change= function (n) {
                return m+=n;
            }
            return change;
        }
        var ch=fun1();//关键就在这里,调用fun1后函数已经结束,按照常理函数中的变量会随着函数的结束而不可访问
        alert(ch(1));//但是在这里输出的是11

这就是闭包的另一个作用,当调用原函数结束后还可以对函数内部的变量进行访问。因为函数内部的chage()被一个全局变量引用着,因此m并不会退出内存。

说完这个之后,很多还会再说内部函数的this作用域的问题,因为之前在函数的调用里面已经讲了,并且个人觉得这与函数的闭包并没有多大关系,只是闭包也是内部函数而已。因此这里就不再说那点了。

回调:让人受不了的就是js的回调了,多层的嵌套会让代码完全看不清楚。不知回调还是“毁掉”,但是据说node.js中的异步回调函数正是其大放异彩的地方。有人说异步的代码是反人类的,但是同步的做事是不是也是反人类的。我想可能没人能受得了先吃饭再看电视而不是一边吃饭一边看电视吧。

模块:有时候有没有想过写js代码和java代码一样,但是js中没有类一说,作为补充提供了与之类似的模块化。

其实上面的闭包就有点像模块化了。下面我们看一个更像java中类的模块化代码。

        var model1=(function(){
            var m=10;
            var fun1= function () {
                alert("我是fun1")
            }
            var fun2= function () {
                alert("我是fun2")
            }
            return {
                fun1:fun1,
                fun2:fun2
            }
        })();
        //在model1外部进行调用
        model1.fun1();

动态的为model1增加方法:

 var model1=(function(){
            var m=10;
            var fun1= function () {
                alert("我是fun1")
            }
            var fun2= function () {
                alert("我是fun2")
            }
            return {
                fun1:fun1,
                fun2:fun2
            }
        })();
        //为model1增加方法fun3
        var model2= (function (mod) {
            mod.fun3=function(){
                alert("我是fun3")
            }
        })(model1);
        model1.fun3();

  

时间: 2024-07-30 01:56:59

JavaScript函数部分补充的相关文章

JavaScript函数认识,Js中的常见函数

JavaScript函数: 也称为方法,用来存储一块代码,需要的时候调用. 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. 函数需要包含四要素:返回类型,函数名,参数列表,函数体 拓展:强类型语言的函数 public int Sun(int a,int b){ return = a+b; } return返回,Sun函数名,int a,int b,参数列表,int 整型. 没有返回值的函数: public void Sun(int a,int b){ } Sun(1,2); 这样的

JavaScript函数及其prototype

一.定义 函数可以通过声明定义,也可以是一个表达式. (1)函数声明式: 分号是用来分隔可执行JavaScript语句,由于函数声明不是一个可执行语句,所以不以分号结束. function a(){ console.log('bbb'); } (2)函数表达式: 函数表达式以分号结尾,因为它是一个执行语句. var a = function(){ console.log('aaa'); } (3)声明式变体: var a = function a(){ console.log('bbb'); }

第八章:Javascript函数

函数是这样一段代码,它只定义一次,但可能被执行或调用任意次.你可能从诸如子例程(subroutine)或者过程(procedure)这些名字里对函数概念有所了解. javascript函数是参数化的:函数定义会包括一个形参(parmeter)标识符列表.这些参数在函数中像局部变量一样工作.函数会调用会给形参提供实参的值.函数使用它们实参的值计算返回值,成为该函数的调用表达式的值. 除了实参之外,么次调用还会拥有一个值——本地调用的上下文——这就是this关键字值 如果函数挂载在一个对象上,作为对

JavaScript函数和对象提高!!!!!!

JavaScript函数和对象提高!!!!!! 主要内容介绍 函数 函数的概念 函数的参数 函数的返回值 函数的作用域 变量提升和函数提升 函数参数传递方式 对象 什么是JavaScript对象 创建对象的两种方式 对象属性的基本操作 创建自定义对象 函数的4种调用方式(简单介绍) 一.函数 函数小测验 函数复习测试题 1.1 函数基本概念 1.1.1 什么是函数 函数是定义一次但可以调用或执行任意多次的一段JavaScript代码. 函数也叫做方法(了解概念) 当一个函数在一个对象上被调用的时

javascript函数的定义与执行

要理解javascript函数的定义与执行,首先需要知道这几个重要的概念,现在可以先知道稍后再理解! 函数的执行环境(excution context).活动对象(call object).作用域(scope).作用域链(scope chain). 接下来,我们以这个函数为例进行分析: 步骤: 1.设置作用域链 当定义函数a的时候,JS解释器会将函数a的作用域链(scope chain)设置为“定义a时a所在的环境”,此处a第一个添加的作用域是window对象.(如果a是一个全局函数,则scop

ABP展现层——Javascript函数库

ABP展现层——Javascript函数库 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate ASP.NET Boil

C#实现百度地图附近搜索&调用JavaScript函数

前一篇文章"C#调用百度地图API入门&解决BMap未定义问题"讲述了如何通过C#调用百度API显示地图,并且如何解决BMap未定义的问题.这篇文章主要更加详细的介绍百度地图的一些功能,包括附近搜索.城市搜索.路线规划.添加覆盖物等等. 希望文章对你有所帮助!如果文章中有不足之处,还请海涵~ 百度官方文档:http://developer.baidu.com/map/jsmobile.htm 官方DEMO例:http://developer.baidu.com/map/jsde

JavaScript函数,作用域以及闭包

JavaScript函数,作用域以及闭包 1. 函数 (1). 函数定义:函数使用function关键字定义,它可以用在函数定义表达式或者函数声明定义. a. 函数的两种定义方式: * function functionName() {} * var functionName = function(){} b. 两种函数定义不同之处 1). 声明提前问题 函数声明语句   :声明与函数体一起提前 函数定义表达式 :声明提前,但是函数体不会提前 请看下面图示:绿色线上面实在js初始加载的时候,查看

HTML 学习笔记 JavaScript (函数)

函数是由事件驱动的或者当他被调用时执行的可重复使用的代码块 实例 <!DOCTYPE html> <html> <head> <script> function myFunction() { alert("Hello World!"); } </script> </head> <body> <button onclick="myFunction()">点击这里</b