zoukankan      html  css  js  c++  java
  • javascript匿名函数

    摘要:

        本文讲解的是javascript最基础也是最重要的东西--函数,之所以写这篇博文,是因为面试的时候问到了,也算是温故而知新了。

    先上个例子,如果你看懂了,说明你已经理解了本文要讲的。

     1 var f = (function() {
     2 
     3     function f() {return 10;}
     4 
     5     return f();
     6 
     7     function f() {return 20;}
     8 
     9     var f = 30;
    10 
    11 })();
    12 
    13 console.log(f);

        javascript高级程序设计中这样描述函数--可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。之前介绍过了strict mode,严格模式对函数有一些限制:

    1. 不能把函数命名为eval或arguments
    2. 不能把参数命名为eval或arguments
    3. 不能出现两个命名参数同名的情况

    发生以上情况就会导致语法错误,代码无法执行。

    函数定义

    函数定义分为三种

    1、构造函数

    var fun = new Funciton();

    2、普通定义

    function fun() {}

    3、函数式定义

    var fun = function() {};

    这三种方式都可以定义函数fun。

    参数

    函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数。原因是参数在内部是用一个数组来表示的。在函数体内可以通过arguments对象来访问参数数组,举个例子

    function sayHi() {

        alert("Hello " + arguments[0] + "," + arguments[1]);

    }

    通过访问arguments对象的length属性来获知有多少个参数。函数的length会返回函数的参数个数。

    注意:所有参数传递的都是值,不可能通过引用传递参数。

    函数不能重载,只能重写

    如果定义了两个名字相同的函数,则该名字只属于最后定义的函数,举个例子:

     1 function add(num) {
     2 
     3     return num + 100;
     4 
     5 }
     6 
     7 function add(num) {
     8 
     9     return num + 200;
    10 
    11 }
    12 
    13 var result = add(100) //300

    注意:函数在执行完return语句之后停止并立即退出。

    函数种类

    函数分为两种一种是有名函数,另一种是匿名函数。例如下面的有名函数

    function fun() {

    }

    如果调用的话,只需要fun()就可以。

    匿名函数,顾名思义就是没有函数名。例如

    function() {}

    函数调用是通过函数名来调用,匿名函数怎么调用呢?一种就是将匿名函数赋给一个变量,让这个变量充当函数名。另一种就是用()来调用,例如下面三种方法

    1、(function() {return;}());

    2、(function() {return;})();

    3、function() {return;}();

    例子:

    1 (function(x, y) {
    2 
    3     ​alert(x + y);
    4 
    5 })(2,3);
    6 
    7 //alert(5)

    2和3将会作为参数传递给x和y

    下面就来讲讲最上面的例子,这个例子里面涉及到闭包,后面会说

    首先定义一个变量f,然后赋值一个匿名函数,这里呢需要注意一点函数里所有变量的定义都会被前置,所以匿名函数里的执行顺序是

     1 var f = (function() {
     2     var f;
     3     function f() {
     4         return 10;
     5     }
     6     function f() {
     7         return 20;
     8     }
     9     return f();
    10     f = 30;
    11 })(); 

    外面的变量f和里面的变量f不在同一个作用域内(闭包),所以互不影响。​因为函数不能重载,所以外面变量f=(function f() {return 20;})();,所以最终输出的是20。

  • 相关阅读:
    Linux pwn入门教程(1)——栈溢出基础
    Java代码审计入门篇
    利用Burp Suite攻击Web应用
    记一次对某企业的渗透测试实战
    Python 绝技 —— UDP 服务器与客户端
    SQL注入之重新认识
    文件上传和WAF的攻与防
    phpMyAdmin 4.7.x CSRF 漏洞利用
    Powershell渗透测试系列–进阶篇
    AFN检測网络情况
  • 原文地址:https://www.cnblogs.com/xiyangbaixue/p/4105511.html
Copyright © 2011-2022 走看看