码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript面试题(1)

时间:2016-06-06 06:51:07      阅读:373      评论:0      收藏:0      [点我收藏+]

标签:

问题1:作用域

(function() {
    var a = b = 5;
})();
console.log(b);
// 非严格状态显示  5
// a 是局部变量,b 是全局变量
// 严格状态显示 b is not defined

(function() {
    ‘use strict‘;
    var a = window.b = 5;
})();
console.log(b)
// 严格状态下显示 5

问题2:创建“内置”方法

        window.onload = function(){
            var str = "hello";
            var oText = document.getElementById(‘text‘);
// Javascript的继承及原型属性的知识,下面这个方法可以检测在自己定义函数之前有没有这个函数存在,避免重复定义
            String.prototype.repeatify = String.prototype.repeatify || function(times){
                var str = ‘‘;
                for(var i=0;i<times;i++){
                    str += this;
                }
                return str;
            }
            oText.innerHTML = str.repeatify(3);
        }

 

问题3:声明提前

        window.onload = function(){
            function test(){
                console.log(a);
                console.log(foo());
                var a=1;
                function foo(){
                    return 2;
                }
            }
            test();
        }
// 上面这段代码相当于下面这段代码
          window.onload = function(){
             function test(){
                 var a;
                 function foo(){
                    return 2;
                  }
                 console.log(a);
                 console.log(foo());
                 a = 1;
                 }
    
              test();
        }

问题4:Javascript中的this

        window.onload = function(){
            var fullname = ‘John Doe‘;
            var obj = {
                fullname:‘Colin lhrig‘,
                prop:{
                    fullname:‘Aulia De Rose‘,
                    getFullname:function(){
                        return this.fullname;
                    }
                }
            }
            var oText = document.getElementById(‘text‘);
            oText.innerHTML = obj.prop.getFullname();
        }
// 显示结果为 Aulia De Rose
            var test = obj.prop.getFullname;
            oText.innerHTML = test();
// 显示结果为 John Doe

 

  Javascript中关键字this所指代的函数上下文,取决于函数是怎样被调用的,而不是怎么被定义的。在第一个console.log(),getFullname()被作为obj.prop对象被调用。因此,当前的上下文指代后者,函数返回这个对象的fullname属性。相反,当getFullname()被赋予test变量,当前的上下文指代全局变量window,这是因为test被隐形的作为全局变量的属性。基于这一点,函数返回window的fullname。

问题5: call()和apply()

        window.onload = function(){
            var fullname = ‘John Doe‘;
            var obj = {
                fullname:‘Colin lhrig‘,
                prop:{
                    fullname:‘Aulia De Rose‘,
                    getFullname:function(){
                        return this.fullname;
                    }
                }
            }
            var oText = document.getElementById(‘text‘);
            oText.innerHTML = obj.prop.getFullname();
        }
// 显示结果为 Aulia De Rose
            var test = obj.prop.getFullname;
            oText.innerHTML = test.call(obj.prop);
// 显示结果为 Aulia De Rose

 

  call() 或者 apply()方法可以强制转换上下文

Javascript面试题(1)

标签:

原文地址:http://www.cnblogs.com/zhaolina/p/5562558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!