• 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
  • 相关阅读:
    WDA基础三:简单的INPUT选择,简单的TABLE显示
    WDA基础二:界面,元素介绍
    WDA基础一:激活相关服务
    docker in all
    神经网络理论与工程实战-知识积累
    信息论理论学习笔记
    机器学习数学知识积累总结
    互联网,IT,大数据,机器学习,AI知识tag云
    java web dev知识积累
    windows系统相关命令及问题排查实践
  • 原文地址:https://www.cnblogs.com/Gyoung/p/3722521.html
Copyright © 2020-2023  润新知