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);
                                              }
                        
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
              
  • 相关阅读:
    Android拍照+方形剪裁——附代码与效果图
    Caffe源代码中Solver文件分析
    Java学习笔记五(多线程)
    setTimeout和setInterval的区别
    javascript中this的妙用
    javascript基于原型的语言的特点
    css样式小技巧
    html块元素和内联元素
    怎么解决浏览器兼容性问题
    高效率、简洁、CSS代码优化原则
  • 原文地址:https://www.cnblogs.com/magicroc/p/5938754.html
Copyright © 2011-2022 走看看