zoukankan      html  css  js  c++  java
  • 一到关于js函数的前端面试题引发的血案

    题目如下:

    1 f = function() { return true; };
    2  g = function() { return false; }; 
    3 (function() {
    4      if (g() && [] == ![]) { 
    5          f = function f() { return false; }; 
    6          function g() { return true; }
    7      } 
    8 })();
    9  alert(f()); // true or false ?

     看IE6、IE7、IE8与其它非IE下的不同?

    1 var f = function foo(){ 
    2      return typeof foo; // "foo" is available in this inner scope 
    3  }; // `foo` is never visible "outside" 
    4  typeof foo; // "undefined" 
    5  f(); // "function" 

    除IE6、7、8外,其它浏览器均显示foo为undefined 

    这是JScript的bugs,好像IE9的beta2中已经修复了?(尚未安装过,有待证实) 

     

    IE中有两个“特性” 

    1、函数声明中的标识符允许包含.运算符,例如function window.onload() {} 

    2、函数表达式中的标识符可以被函数外部访问 var f = function g(){}; typeof g; // "function"

     

    一些相关文章: 

    关于JS引擎对var与function预解析 

    如何理解表达式中的具名函数

    函数声明与函数表达式》 

    命名函数表达式探秘

    具名函数表达式

    看完这些资料,做这道题应该就很简单了吧?

     

    在IE6、7、8下面,代码等价于:

     1 f = function() { return true; };
     2 g = function() { return false; };
     3 (function() {
     4     var f, g;
     5      g = function() {return true;}
     6      f = function() {return false;}
     7     if (g()) {
     8         f = f;
     9     }
    10 })();
    11 alert(f());

    在FF下的代码等价于:

    1 f = function() { return true; };
    2 g = function() { return false; };
    3 (function() {
    4     if (g()) {
    5         /**..*/
    6     }
    7 })();
    8 alert(f());

    在Chrome下等价于:

     1 f = function() { return true; };
     2 g = function() { return false; };
     3 (function() {
     4     var g;
     5     function g() {
     6         return true;
     7     }
     8     if (g()) {  
     9        f = function f() {
    10             return false;
    11        }
    12     }
    13 })();
    14 alert(f()); 
  • 相关阅读:
    Windows下安装redis,并与PHP使用
    php中的一些小细节(1)
    MIME类型
    Oracle与SQL Server事务处理的比较
    php+memcached缓存技术实例
    B-树
    平衡二叉树(AVL)
    树--二叉查找树(二叉排序树)
    八种常见的排序算法
    反转一个值中的最后n位
  • 原文地址:https://www.cnblogs.com/leolai/p/2541838.html
Copyright © 2011-2022 走看看