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

    
    


  • 相关阅读:
    c++ 反汇编 堆变量
    glibc源码逆向——fread函数
    glibc源码逆向——fopen
    buu查漏补缺刷题(3)
    gyctf_2020_borrowstack
    实现用句柄表反调试
    pwnable_orw 学习shellcraft新花样
    buu查漏补缺刷题(2)
    gdb调试源码
    buu查漏补缺刷题(1)
  • 原文地址:https://www.cnblogs.com/syf/p/4246696.html
Copyright © 2011-2022 走看看