龙空技术网

JavaScript:10个人就有9个人答不上来的面试题!挑战一下?

键盘码农 2928

前言:

目前姐妹们对“js获取父页面变量”大约比较注意,咱们都想要分析一些“js获取父页面变量”的相关内容。那么小编同时在网上收集了一些有关“js获取父页面变量””的相关知识,希望同学们能喜欢,大家一起来学习一下吧!

10个人就有9个人答不上来的面试题!挑战一下?

JavaScript:10个人就有9个人答不上来的面试题

Js作用域链?

每当执行一段js代码(全局函数)时,js引擎都会为其创建一个作用域又称执行上下文,在页面加载后首先会创建一个全局的作用域,然后每执行一个函数都会创建一个对应的作用域,也就形成了一个作用域链,每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是函数作用域。

Js作用域链的作用?

用于解析标识符,当函数被创建时(不是执行),会将this、arguments、命名参数和该函数中的所有的局部变量添加到该当前作用域中,当js需要查找变量x的时候(这个过程被称为变量解析),它首先会从链尾也就是当前作用域查找是否存在这个变量,如果没有找到就顺着作用域一直往上找,直到查找到链头,也就是全局作用域,仍未找到该变量的话,就认为这段代码的作用域链上不存在x变量,并且抛出一个引用错误,(ReferenceError)。

10个人就有9个人答不上来的面试题

如何理解js原型链?

Js中的每个对象都有一个prototype属性,我们称之为原型,而原型的值也是一个对象,原型的值是个对象,原型的值是个对象,那么这个对象也有自己的原型,这样串联起来就形成了一个原型链,原型链的链头是Object,它的prototype的属性比较特殊,值是null。

原型链的作用是用于对象继承,函数A的原型属性(prototype prototype)是一个对象,当这个函数被用作构造函数来创建实例时,该函数的原型属性将被作为原型赋值给所有对象实例,这样就能实现继承,比如数组的方法就是从数组的原型上继承而来。(继承的终极奥义:prototype)

当访问对象的一个属性的时候,首先查找对象本身,找到那就返回;如果没有找到,那就继续查找原型对象的属性,(如果还找不到,实际上还会沿着原型链继续往上找,直至到根)。只要没有被覆盖的话,对象原型的属性就能在所有的实例中找到,如果整个原型链都没找到则返回undefined;

Js变量提升

变量提升是es5的一个糟糕特性,这个特性被非正式的称为“声明提前”,也就是函数中的所有变量(不涉及赋值)都被提前至函数的顶部。

function (){

console.log(a); //undefined

var a = “yasuo”

}

等同于下面的代码 ->

function (){

var a;

console.log(a); //undefined

a = “yasuo”

}

理解和应用闭包?

闭包是一种使函数能够去其他函数内读取局部变量的语法机制。

function outFunc(){

var name = "Vicfeel";

function inFunc(){

console.log(name);

}

return inFunc;

}

inFunc(); //控制台显示"Vicfeel"

闭包应用举例,模拟类的私有属性,利用闭包的性质,局部变量只有在sayAge方法中才可以访问,而name在外部也访问,从而实现了类的私有属性。

function User(){

this.name = "Vicfeel"; //共有属性

var age = 23; //私有属性

this.sayAge:function(){

console.log("my age is " + age);

}

}

var user = new User();

console.log(user.name); //"Vicfeel"

console.log(user.age); //"undefined"

user.sayAge(); //"my age is 23"

js面试

New 构造对象的本质

function User(){

this.name = "Vicfeel";

this.age = 23;

}

var user = new User();

通过new操作符,实际上在构造函数User中完成了如下操作:

创建一个新的对象,这个对象的类型是object;

设置这个新的对象的内部、可访问性和prototype属性为构造函数(指prototype.construtor所指向的构造函数)中设置的;

执行构造函数;

返回新创建的对象。

function User(){

//this = {};

//this.constructor = User;

this.name = "Vicfeel";

this.age = 23;

//return this;

}

var user = new User();

如果构造函数默认返回的新创建的this对象,如果手动return 一个变量的话,如果该变量是原始类型则无效,如果是对象,则返回该对象。

事件委托||事件代理||JavaScript代理?

是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能。(事件委托的终极奥义:event.target || event.srcElement + 事件冒泡)

如果对你有帮助请关注键盘码农,每天更新干货教程,难点等经典案例!如果有需要帮助请在下发留言评论,很高兴可以帮到您。

标签: #js获取父页面变量