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中,函数和函数对象区别;变量对象和活动对象区别

    
    


  • 相关阅读:
    Instruments Tutorial for iOS: How To Debug Memory Leaks
    How to Use Instruments in Xcode
    Demystifying iOS Application Crash Logs
    “iOS 推送通知”详解:从创建到设置到运行
    推送通知iOS客户端编写实现及推送服务器端编写
    cocos2d-iphone 与 UI组件
    ScrollLayer
    TexturePacker
    mybatis的配置
    spring+redis
  • 原文地址:https://www.cnblogs.com/syf/p/4246696.html
Copyright © 2011-2022 走看看