zoukankan      html  css  js  c++  java
  • javascript中所谓的“坑”收录

    坑一:

    // 反例
    myname = "global"; // 全局变量
    function func() {
    alert(myname); // "undefined"
    var myname = "local";
    alert(myname); // "local"
    }
    func();

    理解:
    JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析);对于JavaScript,只要你的变变量是在同一个作用域中(同一函数),它都被当做是声明的,即使是它在var声明前使用的时候;上面的代码片段执行的行为可能就像下面这样:
    myname = "global"; // global variable
    function func() {
    var myname; // 等同于 -> var myname = undefined;
    alert(myname); // "undefined"
    myname = "local";
    alert(myname); // "local"}
    func();

    坑二:
    Function.prototype.yyyy=1; function finn() { alert(yyyy); } finn();
    Function.prototype.yyyy=1; function finn() { alert(finn.yyyy); } finn();

    Object.prototype.x = 10;

    var w = 20;
    var y = 30;

    // 在SpiderMonkey全局对象里
    // 例如,全局上下文的变量对象是从"Object.prototype"继承到的
    // 所以我们可以得到“没有声明的全局变量”
    // 因为可以从原型链中获取

    console.log(x); // 10

    (function foo() {

    // "foo" 是局部变量
    var w = 40;
    var x = 100;

    // "x" 可以从"Object.prototype"得到,注意值是10哦
    // 因为{z: 50}是从它那里继承的

    with ({z: 50}) {
    console.log(w, x, y , z); // 40, 10, 30, 50
    }

    // 在"with"对象从作用域链删除之后
    // x又可以从foo的上下文中得到了,注意这次值又回到了100哦
    // "w" 也是局部变量
    console.log(x, w); // 100, 40

    // 在浏览器里
    // 我们可以通过如下语句来得到全局的w值
    console.log(window.w); // 20

    })();


    理解:javascript中,函数和函数对象区别;变量对象和活动对象区别

    
    


  • 相关阅读:
    python学习永久存储和异常处理
    python学习os文件系统模块
    python学习文件
    python学习集合
    python学习字典
    python学习递归
    python学习函数
    python学习序列
    js加入收藏
    判断dataset和datareader中是否存在某列
  • 原文地址:https://www.cnblogs.com/syf/p/4246696.html
Copyright © 2011-2022 走看看