面试题集合_作用域

134 阅读2分钟
  1. 写出下面代码输出的结果
console.log(a);
var a = 12;
a = 13;
console.log(a);
console.log(a);
let a = 12;
a = 13;
console.log(a);
console.log(a);
a = 13;
console.log(a);
  1. 写出下面代码输出的结果
var a = 12;
var a = 13;
console.log(a);
let a = 12;
let a = 13;
console.log(a);
  1. 写出下面代码输出的结果
console.log(a, b);
var a = 12,
    b = 12;
function fn() {
    console.log(a, b);
    var a = b = 13;
    console.log(a, b);
}
fn();
console.log(a, b);
  1. 写出下面代码输出的结果
console.log(a, b, c);
var a = 12,
    b = 13,
    c = 14;
function fn(a) {
    console.log(a, b, c);
    a = 100;
    c = 200;
    console.log(a, b, c);
}
b = fn(10);
console.log(a, b, c);
  1. 写出下面代码输出的结果
console.log(a);
if(!('a' in window)){
	var a = 13;
}
console.log(a);
  1. 写出下面代码输出的结果
fn();
function fn(){ console.log(1); }
fn();
function fn(){ console.log(2); }
fn();
var fn = function(){ console.log(3); }
fn();
function fn(){ console.log(4); }
fn();
function fn(){ console.log(5); }
fn();
  1. 写出下面代码输出的结果
f = function () {return true;}
g = function () {return false;}
~function () {
    if (g() && [] == ![]) {
        f = function () {return false;}
        function g() {return true;}
    }
}();
console.log(f());
console.log(g());
  1. 写出下面代码输出的结果
console.log(typeof a);
console.log(typeof a);
let a;
  1. 写出下面代码输出的结果
var ary = [12, 23];
function fn(ary) {
    console.log(ary);
    ary[0] = 100;
    ary = [100];
    ary[0] = 0;
    console.log(ary);
}
fn(ary);
console.log(ary);
  1. 写出下面代码输出的结果(如何查找上级作用域和堆栈内存释放问题)
var n = 1;
function fn() {
    var n = 2;
    function f() {
        n--;
        console.log(n);
    }
    f();
    return f;
}
var x = fn();
x();
console.log(n);
var i = 5;
function fn(i) {
    return function (n) {
        console.log(n + (++i));
    }
}
var f = fn(1);
f(2);
fn(3)(4);
fn(5)(6);
f(7);
console.log(i);
var i = 20;
function fn() {
    i-=2;
    return function (n) {
        console.log((++i)-n);
    }
}
var f=fn();
f(1);
f(2);
fn()(3);
fn()(4);
f(5);
console.log(i);
  1. 写出下面代码输出结果
var num = 10;
var obj = {num: 20};
obj.fn = (function (num) {
    this.num = num * 3;
    num++;
    return function (n) {
        this.num += n;
        num++;
        console.log(num);
    }
})(obj.num);
var fn = obj.fn;
fn(5);
obj.fn(10);
console.log(num, obj.num);
  1. 写出下面代码输出结果
var fullName='language';
var obj={
	fullName:'javascript',
	prop:{
		getFullName:function(){
			return this.fullName;
		}
	}
};
console.log(obj.prop.getFullName());
var test=obj.prop.getFullName;
console.log(test());
var name='window';
var Tom={
	name:"Tom",
	show:function(){
		console.log(this.name);
	},
	wait:function(){
		var fun=this.show;
		fun();
	}
};
Tom.wait();
  1. 腾讯面试题
function fun(){
	this.a=0;
	this.b=function(){
		alert(this.a);
	}
}
fun.prototype={
	b:function(){
		this.a=20;
		alert(this.a);
	},
	c:function(){
		this.a=30;
		alert(this.a)
	}
}
var my_fun=new fun();
my_fun.b();
my_fun.c();
  1. 360面试题
window.val=1; 
var json={ 
    val:10, 
    dbl:function(){ 
        this.val*=2; 
    } 
} 
json.dbl(); 
var dbl = json.dbl; 
dbl(); 
json.dbl.call(window); 
alert(window.val + json.val);
(function(){
    var val =1;
    var json ={
          val:10,
          dbl:function(){
            val*=2;
          }
    };
    json.dbl();
    alert(json.val+val);
})();
function C1(name){
    if(name) {
    	this.name = name;
    }
}
function C2(name){
    this.name =name;
}
function C3(name){
    this.name = name ||'join';
}
C1.prototype.name='Tom';
C2.prototype.name='Tom';
C3.prototype.name='Tom';
alert((new C1().name)+(new C2().name)+(new C3().name));
  1. 滴滴面试题
var foo = {
  bar: function () {
    console.log(this);
  }
};
foo.bar(); 
(foo.bar)();