函数一些简单面试题

列子1:

var num = 10;
 fun();
 function fun() {
     console.log(num);//undefined
     var num = 20;
 }

fun自己本身就有num所有不会访问父级,但是执行到console.log(num),num还未赋值所以是undefined。
列子2:

var a;
function f1() {
    var b;
    var a;
    b = 9;
    console.log(a);//undefined
    console.log(b);//9
    a = '123';
}
a = 18;
f1();

f1自己本身就有a所有不会访问父级,所以a是undefined。b是9.
列子3:

function f1(){
var a;
a=b=c=9;
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
f1();
console.log(c);//9
console.log(b);//9
console.log(a);//报错

a 局部变量,b 和c全局变量
列子4:

function fun(n) {
	console.log(n);//0,1,2,3
	return {
		fun: function(m) {
			console.log(m,n);//1 0,2 0,3 0
			return fun(m, n);
		}
	}
}
var a = fun(0);
a.fun(1); 
a.fun(2); 
a.fun(3); 

a的值是fun: function(m) {。。。}这个整体
列子5:

var test = (function(a) {
	this.a = a;
	return function(b) {
		console.log(a,b)// 1 4
		return this.a + b;//1+4=5
	}
})(function(a, b) {
		console.log(a,b)// 1 2
		return a;
	}(1, 2));
console.log(test(4));//5

test的值是一个立即执行函数
列子6:

var x; // 声明 x
console.log(x); //undefined 
console.log(typeof y); //undefined 
console.log(z); //报错

列子7:

var foo = "function";

var foo;//它只是定义,全不会覆盖变量

alert(foo);//所以返回 function

列子8:

var getName = function(){
    console.log(2);
}
function getName (){
    console.log(1);
}
getName();//2

函数还整体提前,所以后面getName赋值时会覆盖所以结果是2;
列子9:

var x = 1;
var y = 0;
var z = 0;
function add(n){n=n+1;}
y = add(x);//undefined
function add(n){n=n+3;}
z = add(x);//undefined

都为undefined,因为没有返回值
列子10:

var x = 10;
var foo = {
 x: 90,
 getX: function() {
 return this.x;
 }
};
foo.getX(); // 90
var xGetter = foo.getX;
xGetter();//10

因为xGetter()的this的指向的是window,而foo.getX()的是本身;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值