zoukankan      html  css  js  c++  java
  • Javascript模式——函数提升 (笔记)

    函数提升:

    对于所有的变量,无论函数体的何处进行声明,都会在后台被后台被提升到函数顶部。而对于函数同样适用,其原因在于函数只是分配给变量的对象。当使用函数声明时,函数定义也被提升,而不仅仅只是函数声明。

    function foo(){
    
       alert('global foo');
    
    }
    
    function bar (){
    
       alert('global bar');
    
    }
    
    function hoistMe(){
    
       console.log(typeof foo); //function 变量foo以及实现都被提升
    
       console.log(typeof bar); //undefined  bar变量被提升 函数实现没有被提升
    
       foo();                  //global foo
    
       bar();                 //Uncaught TypeError: bar is not a function
    
       function foo(){
    
          console.log('global foo');
    
           }
    
       var bar =function(){
    
          console.log('local foo');
    
           };
    
    }
    
    hoistMe();

    //hoistMe()函数中的foo()和bar移动到了顶部,从而覆盖了foo和bar函数
    
    

                                                                                                                                               

       

      

    作用域:

    javascript中仅存在函数作用域。在函数内部以var 关键字定义的任何变量都是局部变量,对于函数外部是不可见的。如果if条件语句或在for、while循环中,使用var关键字定义一个变量,这并不意味着该变量对于if或for来说是局部变量。它仅对包装函数来说是局部变量,并且如果没有包装函数,它将成为一个全局函数。

    //这里for中定义的i是局部变量。作用域仅在part中
    
    function part(){
        for(var i=0;i<10;i++){
           //..........
       }  
    }
    
    //这里这里for中定义的i是全部变量。
     
    for(var i=0;i<10;i++){
           //..........
       } 

    函数命名属性:

    function fn(){} //函数声明

    var fn=function(){};//函数表达式

    var fn=function fn(){};//函数命名表达式

    在调试器中调试时,name属性是非常有用的,当调试器需要展示函数中的错误时,它可以检测name属性是否存在,并将其作为一个指示符。

    name属性也可用于在自身内部递归调用同一个函数。

     

  • 相关阅读:
    css定位
    盒子模型
    操作边框的属性
    操作表格的属性
    常用css样式
    选择器
    编写css代码的方式
    javascript DOM 共同父节点
    最大子段和问题
    regexp 正则表达式
  • 原文地址:https://www.cnblogs.com/CloverH/p/5178243.html
Copyright © 2011-2022 走看看