zoukankan      html  css  js  c++  java
  • js eval setTimeout 第一个参数是字符串的情况,及在严格模式下的表现

    在非严格模式下 eval 中的代码,就像是插入在代码中的一样。

    function foot(){
    	var b =11;
    	eval("b=function(){};console.log(b)");
    	console.log(b);
    }
    //非严格模式下等同于(有一点不同的是eval 内部的定义的变量是无法被提升的)
    
    function foot(){
    	var b = 11;
    	b = function(){};
    	console.log(b);
    	console.log(b);
    }
    
    //当eval内是一个未知的变量字串时,作用域内的变量可能被破坏。
    
    
    严格模式下等同于
    function foot(){
    	var b = 11;
    
    	//自执行函数
    	(function(){
    		b = function(){};
    	console.log(b);
        })()
    	console.log(b);
    }
    

     setTimeout 第一个参数是字符串时,内部会使用 eval执行。 这里好像无法使用严格模式,严格模式下ggg应该是12 但是实际上却是 xxxx,严格模式好像未生效

    var ggg = 12;
    setTimeout("var ggg= 'xxxx';console.log(ggg)",0);
    setTimeout(function(){
     
    
    	console.log(ggg); //xxxx 
    },0)  

     new Function("var b =11;")  Function 内的字符串自成 function 作用域。

    严格模式下 :arguments 和形参的改变不会再相互影响。

    严格模式 详见:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode

      

  • 相关阅读:
    测试计划设计
    测试方案
    使用gulp构建自动化工作流
    ESLint--定制你的代码规则
    Node.js学习笔记(一):快速开始
    React-Native性能优化点
    ES6笔记(一):ES6所改良的javascript“缺陷”
    windows下React-native 环境搭建
    使用ssh连接gitHub
    javascript中的prototype和constructor
  • 原文地址:https://www.cnblogs.com/chillaxyw/p/9753227.html
Copyright © 2011-2022 走看看