• JavaScript高级程序设计学习笔记--变量、作用域和内存问题


    传递参数

    function setName(obj){
    obj.name="Nicholas";
    obj=new object();
    obj.name="Greg";
    }
    var person=new Object();
    setName(person);
    alert(person.name); //"Nicholas"

    在函数体内重新new一个Object,并将它赋值为"Greg",但在函数外部访问name属性时,其值仍为"Nicholas".实际上,当函数内部重写obj时,这个变量引用的就是一个局部对象了。
    而这个局部对象会在函数执行完毕后立即销毁。

    检测类型

    如果变量的值是一个对象或null,则typeof操作符会像下面例子中所示的那样返回"object";

    var n=null;
    var o=new object();
    alert(typeof n); //object
    alert(typeof o); //object

    延长作用域链

    当执行流进入下列任何一个语句时,作用域链就会得到加长:
    try-catch 语句的catch块
    with语句

    function buildUrl(){
    var qs="?debug=true";
    with(location){
    var url=href+gs;
    }
    return url;
    }

    在此,with语句接收的是location对象,因此其变量对象中就包含了location对象的所有属性和方法。

    没有块级作用域

    if(true){
    var color="blue";
    }
    alert(color);

    如果是在C,C++或是JAVA中,color会在if语句执行完毕后被销毁,但在javascript中,if语句的变量声明会将变量添加到当前的执行环境。在使用for语句时尤其要牢记这一差异,如:

    for(int i=0;i<10;i++){
    doSomething();
    }
    alert(i); //10
  • 相关阅读:
    两种方法实现超出省略号效果
    CSS中定义优先权
    网页设计中字体设置详解
    JavaScript的方法和技巧
    手把手教你使用Gene6FTP远程管理
    用Zend Encoder加密PHP文件和PHP 优化配置
    JavaScript的方法和技巧
    SQL Server 2000订阅与发布的具体操作
    企业级邮件服务软件推荐
    用Zend Encoder加密PHP文件和PHP 优化配置
  • 原文地址:https://www.cnblogs.com/Gyoung/p/3722521.html
Copyright © 2020-2023  润新知