Javascript进阶(6)---函数声明

-------------

  • JS中的函数也是一种对象
  • 函数的返回值是return来决定的,没有则返回undefined

     1、函数声明法

    1. function add(a, b) {
          a = a + a;
          b = b + b;
      }     

      2、函数表达式法

    2. var add = function (a , b){ ......};
    3. (function(){......}());
    4. return function (){......}
    5. var add =function foo(a,b){......}; //命名式函数表达式,存在兼容问题,并不常用
      • 为什么函数声明的前面可以提前调用该函数?

        • 因为函数声明在加载时是被预先处理的,而函数表达式中,只有函数里声明的变量会被预先处理。
        • add(5,4);
          var add =function foo(a,b){alert(a+b)};
        • 而函数表达式本身并不会。所以,在函数表达式前调用该函数则会报错。
        • (暂时没想到栗子)

      3、Function 构造器

      • var func = new Function(‘a‘,‘b‘,‘console.log(a+b);‘)
        func(4,5);

      4、箭头函数

      • 在ES 6 标准下新增加了一种函数:箭头函数
      • 例如:

        x => x*x
        //等价于
        function (x){
            return x*x;
          }
      • 箭头相当于省略了"function"、"{}"、"return"关键字样
      • 在以下特殊情况需要有特殊的变化
        1. 参数不是一个的情况

          (x,y)=> x + y ; //两个参数
          
          ()=> 500;       //无参数
          
          //可变参数的情况
          (x,y, ...rest) => {
              return x+y;
            }
        2. 返回的内容是对象的情况

          x => { foo : x}     //错误写法
          
          x => ({foo : x })   //正确写法
        • 箭头函数完全修复了 this 关键字的指向问题,在箭头函数中,this总是指向词法作用域,也就是外层调用者

          var obj_arrow = {
            birth:1990,
            getAge:function(){
              var b = this.birth;
              var fn = ()=>new Date().getFullYear()-this.birth;
              return fn();
            }
          }
          
          console.log(obj_arrow.getAge());  //26 这里的this 直接指向obj

          箭头函数使用 apply 与 call 时候,因为其内部的 this 以固定指向此法作用域,则 call 与 apply 传入的第一个参数被忽略        

 
时间: 2024-10-12 12:48:04

Javascript进阶(6)---函数声明的相关文章

【JavaScript】Javascript中的函数声明和函数表达式

Javascript有很多有趣的用法,在Google Code Search里能找到不少,举一个例子: <script> ~function() { alert("hello, world."); }(); </script> 试一下就知道这段代码的意思就是声明一个函数,然后立刻执行,因为Javascript中的变量作用域是基于函数的,所以这样可以避免变量污染,但这里的位运算符『~』乍一看让人摸不到头脑,如果去掉它再运行则会报错:SyntaxError. 在阐述

深入理解javascript的作用域--函数声明为什么会前置

标签: javascript函数对象 这篇博文解决了以下迷惑 函数声明为什么前置 函数声明前置和变量前置优先级问题 为什么js文件开头就可以使用Math,String等库,而不需要导入头文件 1.变量对象VO 变量对象(Variable Object, 缩写为VO)是一个抽象 概念中的"对象",它用于存储执行上下文中的: 1. 变量 2. 函数声明 3. 函数参数 js解释器就是通过变量对象(VO)来找到我们定义的变量和函数的. 举个例子: var a = 10; function t

Javascript进阶(7)---函数参数

arguments对象 在JavaScript中,谈到函数参数,就不得不说一说那个熟悉又陌生的argunemts arguments对象用于承载调用函数时候传入的参数 arguments不是一个数组,但是十分类似一个Array,有length属性,也可以用下标去访问 arguments对象的长度是由实参个数而不是形参个数决定的.形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠.对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的

JavaScript中的函数声明和函数表达式

JavaScript 中定义函数的方式有两种,一种是函数声明,另一种是函数表达式.这两种定义方式之间有一些细微的差别. 1.函数声明: function 关键字 + 函数名字 + 函数体构成了函数声明,具体形式如下: function functionName(arg0, arg1, arg2) {   // function body } Firefox. Safari. Chrome 和 Opera 都给函数定义了一个非标准的 name 属性,通过这个属性可以访问到给函数指定的名字: ale

javascript立即执行函数

javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.  ( function(){…} )()  和  ( function (){…} () )  是两种javascript立即执行函数的常见写法; 最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的; 后来发现加括号的原因并非如此.要理解立即执行函数,需要先理解一

函数声明、函数表达式、匿名函数

函数声明.函数表达式.匿名函数 ()先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明 函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式. 匿名函数:function ()

为什么函数声明后可以不加分号而函数表达式后要加分号呢?

JavaScript:为什么函数声明后可以不加分号而函数表达式后要加分号呢?是就是这个硬性规定的,还是有什么机制原因呢 function functionName(arg0,arg1,arg2){ //函数声明} var functionName=function(arg0,arg1,arg2){ //函数表达式}; //注意分号

浅谈javascript立即调用函数表达式

函数声明.函数表达式.匿名函数: 函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式. 匿名函数:function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式

JavaScript进阶系列02,函数作为参数以及在数组中的应用

有时候,把函数作为参数可以让代码更简洁. var calculator = { calculate: function(x, y, fn) { return fn(x, y); } }; var sum = function(x, y) { return x + y; }, diff = function (x, y) { return x - y; }; var sumResult = calculator.calculate(2, 1, sum), diffResult = calculat