文档章节

javascript 函数

Q_z
 Q_z
发布于 2015/02/28 15:15
字数 1028
阅读 87
收藏 5

3.4 函数也是数据
    函数是一种数据类型,
  

   function f() {
        return 1;
     }

     var f = function (){ retrun 1; }


     第二种定义方式通常被叫作函数标识记法。

     函数这种特殊的数据类型有两个重要的特性:
        1.它们所包含的是代码
        2.他们是可执行的(或者说是可调用的)


    3.4.1 匿名函数
        1.函数是本质上与其他的变量并区别,因此他也可以在名字的情况下被使用、
           function (a){ return a;}


         2.让散落在代码中的那些匿名数据片段不会真的一无食处,我们可以将它们设置成函数。这样我们就有了两种优雅的用法。
            一、我们可以将匿名函数作为参数传递给其他的函数,这样,接收方函数就能利用我们所传递的函数来完成某些事情。
            二、我们可以定义某个匿名函数来执行某些一次性仍无


       3.4.2 回调函数
               把函数当成参数传递
           

     function one (){
                    return 1;
                }
                function two(){
                    return 2;
                }
                function invoke_and_add(a,b){
                    return a() + b();
                }
                //TO CALL
                invoke_and_add(one,two);

                使用匿名函数来替代one() 和two(),以作为目标函数的参数
              

  invoke_and_add(function(){return 1},function(){return 2;});
                function a(b){
                    b();
                }
                function b(){
                    console.log("im callback");
                }

                将函数A传递给函数B,并由B执行A时,A就成了一个回调函数

   function a(b){

                       console.log("im a");  

                       b();

                    }

                    //回调函数    

                    function b(){

                         console.log("IM CALLBACK");  

                     }

                A是一个无名函数,我们就称为匿名回调函数
                   //传递匿名回调函数
                  

 a(function(){

                    console.log("匿名函数");

                   });


              什么时候使用回调函数???
                1、他可以让我们在不做命名的情况下传递函数(这意味着可以节省全局变量);
                2、我们可以将一个函数调用操作委托另一个函数(这意味着可以节省一些代码编写工作)
                3、它们有助于提升性能

 


                 // style1、
        

function multiplyByTwo(a,b,c){
            var i,ar = [];
            for(var i=0;i<3;i++){
                ar[i] = arguments[i]*2;
            }
            return ar;
         }
         function addOne(a){
            return a+1;
         }
         console.log(multiplyByTwo(1,2,3));
         console.log(addOne(100));


         // style2. 我们要实现三个元素在两个函数之间的传递,这需要定义一个用户存储元素的数据
       

  var myArr=[];
         myArr = multiplyByTwo(10,20,30);
         console.log(myArr);
         for(var i=0;i<3;i++){myArr[i] = addOne(myArr[i]);}
            console.log(myArr);


        //  style3.  把两个函数合二为一  对multiplyByTwo 函数做一些改动,使其就是一个回答覅函数,并在每次迭代操作中调用它
        // 
        // 
       

function multiplyByTwo(a,b,c,callback){
            var i,ar = [];
            for(var i=0;i<3;i++){
                ar[i] = callback(arguments[i]*2);
            }
            return ar;
         }
         myArr = multiplyByTwo(1,2,3,addOne);


自调函数:
   
   

(function(){

        alert('foo');

    })();

    1.将匿名函数放进
        - 语法格式:(匿名函数)
        //0.匿名函数
      

  function(){
        }

        - 立即调用语法格式: (匿名函数)()
        //1.自调函数
       

 (function(){

            alert('foo');

        })();

        - 传递参数语法格式:(匿名函数)(参数)
        //2.匿名函数可以传递参数
     

   (

            function(name){

                console.log("匿名函数可以传递参数="+name);

            }

        )("demo")


        什么时候使用自调函数

            1.自调匿名函数的好处不会产生任何变量,
            2.缺点是这样的函数是无法重复执行的。
            3.匿名自调函数最适合一些一次性或初始化的任务。

3.4.5 内部(私有)函数
 

   function a(param){
        function b(theinput){
            return theinput*2;
        }
        return 'The result is' + b(param);
    }

    使用私有函数的好处主要有以下几点:
        1.有助于我们确保全局名字空间的纯净性(这意味着命名冲突的机会很小)
        2.私有性————这使我们可以选择只将一些必要的函数暴露给许“外部世界”,并保留属于自己的函数,使他们不为该应用程序的其他部分所用。


3.4.6 返回函数的函数

        function a(){
            alert('a!')
            return funtion(){
                alert("返回回来的函数");
            }
        }
        a()();

        好处:
            1.这对于要执行某些一次性初始化工作的函数非常有用。
            2.


3.5 闭包
   
     3.5.2 词法作用域

function f1(){
                var a = 1;
                //被执行时
                f2();
            }
            //被定义时
            function f2(){
                return a;
            }
            f1();

 

 

 

 

 

              

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

© 著作权归作者所有

Q_z

Q_z

粉丝 18
博文 17
码字总数 14466
作品 0
成都
程序员
私信 提问
asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结

通常javascript代码可以与HTML标签一起直接放在前端页面中,但如果JS代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿;所以一般有良好开发习惯的程序员都会...

黄献
2012/11/04
0
0
学习Javascript的8张思维导图

分别归类为:  javascript变量  javascript运算符  javascript数组  javascript流程语句  javascript字符串函数  javascript函数基础  javascript基础DOM操作  javascript正则表达式...

thinkyoung
2014/09/23
0
0
JavaScript开发者应懂的33个概念

简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南。 本篇文章是参照 @leonardomso 创立,英文版项目地址在这里。 ...

大灰狼的小绵羊哥哥
2018/10/22
0
0
JS异步编程之callback

为什么 JS 是单线程? 众所周知,Javascript 语言的执行环境是"单线程"(single thread)。 所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执...

南波
02/17
0
0
《JavaScript 权威指南》读书笔记 1 - 简介

原文:https://keelii.github.io/2016/06/16/javascript-definitive-guide-note-0/ 第一章 主要介绍 JavaScript 的大概情况、基本语法。之前没有 JavaScript 基础的看不懂也没关系,后续章节...

keelii
2016/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务之架构技术选型与设计

本文主要介绍了架构技术选型与设计-微服务选型,Spring cloud 实现采用的技术,希望对您的学习有所帮助。 架构技术选型与设计-DUBBODubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿...

别打我会飞
52分钟前
3
0
在Windows中运行Linux bash命令的几种方法

如果你正在课程中正在学习 shell 脚本,那么需要使用 Linux 命令来练习命令和脚本。 你的学校实验室可能安装了 Linux,但是你自己没有安装了 Linux 的笔记本电脑,而是像其他人一样的 Window...

老孟的Linux私房菜
55分钟前
6
0
深入理解计算机系统(1.1)------Hello World 是如何运行的

上一篇序章我谈了谈 程序员为啥要懂底层计算机结构 ,有人赞同也有人反对,但是这并不影响 LZ 对深入理解计算机系统研究的热情。这篇博客以案例驱动的模式,通过跟踪一个简单 Hello World 程...

vinci321
今天
2
0
Linux操作系统之Shell程序设计

Linux操作系统之Shell程序设计 Shell是种命令解释程序,也可以看作是一种命令语言的解释器。 用户在与Shell交互时所输入的命令行必须符合Shell命令的语法和语义规范,才能够被Shell理解并执行...

linuxCool
今天
7
0
Java Foreach拉姆达表达式

以下案例分析了foreach循环和Java8 拉姆达表达式的区别 public static void main(String[] args) {/* * foreach 和 list */List<String> arrs = new ArrayList<>();...

cuishy
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部