zoukankan      html  css  js  c++  java
  • JavaScript函数定义和调用 变量作用域

     本文是笔者在看廖雪峰老师JavaScript教程时的个人总结
     
    JavaScript中函数定义可以是这样的格式
    function 函数名(参数) {
        函数体
    }
    也可以是这样的格式     
    var 函数名 = function (参数) {
        函数体
    };
     
    关键字一:arguments
                  获取全部参数
               只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array。第一个参数是arguments[0]....[n]
    关键字二:rest
                        获取 获取除了已定义参数之外的参数
                        定义函数的时候要这样写
                                  function foo(a, b, ...rest)
                        如果参数正常,则rest是一个空数组
     
     
     
     
             变量作用域
                         如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量
                         如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用
                         由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行
                         JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量
            变量提升
                    JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部
                    JavaScript引擎自动提升了变量的声明,但不会提升变量的赋值。
              
              全局作用域
                    不在任何函数内定义的变量就具有全局作用域。实际上,JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性        
                    JavaScript实际上只有一个全局作用域。任何变量(函数也视为变量),如果没有在当前函数作用域中找到,就会继续往上查找,最后如果在全局作用域中也没有找到,则报ReferenceError错误
         
     
              块级作用域     
                    为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量(for循环中)
                   
              常量
                         ES6标准引入了新的关键字const来定义常量,constlet都具有块级作用域
     
     
     
              对象的方法:
                        1.在一个对象方法内部,this是一个特殊变量,它始终指向当前对象。要保证this指向正确,必须使用obj.方法
                        2.把对象的方法放到外面定义,在内部通过一属性指向函数名。如果在外部直接调用这个函数,则this指向全局对象window。在static模式下,函数的this指向undefined,所以在static模式下,会得到一个错误
                         3.this指针只在对象的函数中指向对象,如果在对象的函数内的函数还是指向undefined。如果要在函数的函数中使用this,可以先声明一个that变量捕获this,在函数的函数中使用this的地方换成that
     
                        4.怎么控制函数中this指针的指向,可以使用函数自带的apply方法。它接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数。普通函数的话this指针值是null
                        执行格式:函数名.apply(指向的对象(或者null),[函数本身需要的参数列表以数组形式传进来])
                        函数也自带一个call方法,call和apply的区别在于                           
          • apply()把参数打包成Array再传入;
          • call()把参数按顺序传入。
                        5.通过apply实现装饰器。
                             步骤1.需要替换掉的函数也就是需要重构或者说是需要增加功能的函数fun()
                                            var oldfun = fun;
                                            fun = function(){
                                                 增加的功能代码
                                                  return oldfun.apply(null,arguments);
                                              }
                        
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
              
  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/magicroc/p/5938754.html
Copyright © 2011-2022 走看看