• JavaScript中变量声明有var和没var的区别


    本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是

    (function(){

    ...

    })();

    在函数内部,有var和没var声明的变量是不一样的。有var声明的是局部变量,没var的,声明的全局变量。

    在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供的属性的特性查询方法,来发现之间的区别。

    var fff = 2;
    window.ffa = 3;
    ffb = 4;
    this.ffc = 4;
    var ffftx = Object.getOwnPropertyDescriptor(window, 'fff');
    var ffatx = Object.getOwnPropertyDescriptor(window, 'ffa');
    var ffbtx = Object.getOwnPropertyDescriptor(window, 'ffb');
    var ffctx = Object.getOwnPropertyDescriptor(window, 'ffc');
    结果为:
    delete fff; // 无法删除
    delete ffa; // 可删除
    delete ffb; // 可删除
    delete ffc; // 可删除
    通过上面,发现,原来还是有差别的,我们再用delete删除属性来验证下,配置性为false的属性无法删除。
    也就是通过变量var声明全局对象的属性无法删除,我们还会发现和函数声明创建的全局对象属性也无法删除。
    总之,加var和不加var是有区别的。
      
     
     
    使用var语句重复声明语句是合法且无害的。如果重复声明且带有赋值,那么就和一般的赋值语句没差别。如果尝试读取没有声明过的变量,Js会报错。
    JavaScript的函数作用域内,声明的变量或内部函数,在函数体内都是可见的。意味着,函数在定义之前可能已经可用。函数定义有两种方式,一种是函数定义表达式,一种是函数声明语句。
     
     
    // 函数定义表达式
    var fns = function (){
    // ...
    };
    // 函数声明语句
    function fns(){
    // ...
    }
     
    函数声明语句“被提前”到外部脚本或外部函数作用域的顶部,所以以这种方式声明的函数,可以被再它定义之前出现的代码所调用。而函数定义表达式中,变量的声明被提前了,但是给变量的赋值是不会提前的,所以,以表达式方式定义的函数在函数定义之前无法调用。
     
     
    (function() {
    testa(); // 打印出testa
    testb(); // 报错:提示undefined is not a function
    console.log(testc); //undefined,如果移到上面就可以了
    function testa() {
    console.log("testa");
    }
    var testb = function() {
    console.log("tesb");
    }
    var testc = "testc";
    })();
    所以,我们在申明变量和函数时,尽量使变量和函数的申明提前。
     
     
     

     

  • 相关阅读:
    图像旋转与图像缩放及Matlab代码实现
    主成分分析 matlab手把手教操作、SPSS、python实例分析
    直方图均衡化与Matlab代码实现
    kNN算法基本原理与Python代码实践
    MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM
    vue实战——对没见过的东西的科普以及第一次踩坑
    记录关于js模块的浅薄探索(一)——从别人博客中的理解
    js中的同步异步
    webpack踩坑记录(一)
    vue入门(二) ——监听属性,样式绑定
  • 原文地址:https://www.cnblogs.com/LiuYuXuanIsSoGood/p/7901044.html
Copyright © 2020-2023  润新知