javascript基础语法

20个必会的JavaScript面试题 < 7 8 17 18>- https://segmentfault.com/a/1190000008785931
10个流行的JavaScript面试题<1 2 8道> - https://segmentfault.com/a/1190000019379599
JavaScript篇 js经典前端面试题

------------------理论
10 谈谈this的理解

  1. this总是指向函数的直接调用者(而非间接调用者)
  2. 如果有new关键字,this指向new出来的那个对象

46 JS垃圾回收机制?

  1. 标记清除:
    这个算法把“对象是否不再需要”简化定义为“对象是否可以获得”。
    这个算法假定设置一个叫做根(root)的对象(在Javascript里,根是全局对象)。定期的,垃圾回收器将从根开始,找所有从根开始引用的对象,然后找这些对象引用的对象。从根开始,垃圾回收器将找到所有可以获得的对象和所有不能获得的对象。

  2. 引用计数:
    这是最简单的垃圾收集算法。此算法把“对象是否不再需要”简化定义为“对象有没有其他对象引用到它”。如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。
    该算法有个限制:无法处理循环引用。两个对象被创建,并互相引用,形成了一个循环。它们被调用之后不会离开函数作用域,所以它们已经没有用了,可以被回收了。然而,引用计数算法考虑到它们互相都有至少一次引用,所以它们不会被回收。

python也采用了垃圾收集机制,采用引用计数为主,标记—清除和分代收集两种机制为辅的策略。

18 javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?
除了正常模式运行外,ECMAscript添加了第二种运行模式:“严格模式”。
作用:

  1. 消除js不合理,不严谨地方,减少怪异行为
  2. 消除代码运行的不安全之处,
  3. 提高编译器的效率,增加运行速度

10 说说对 prototype和 __proto __ 的理解

【参考答案】prototype是函数才有的属性 ;__proto __是所有对象都有的属性,__proto __指向构造它的对象的对象的prototype。例如:

> var o = new Object()
o.__proto__ == Object.prototype
< true

o是Object构造出的对象,o的__proto __指向Object的prototype,这样o可以使用Object.prototype里面的方法。原型链:当js查找对象的属性时,先查找对象自身是否具有该属性,如果没有,就会去__proto __指向的prototype对象上查找,直到找到或者__proto __为null

13 let和const区别(今日头条)

二者都是块级作用域
都不能和它所在作用域内的其他变量或函数拥有相同的名称

两者还有以下两点区别:

const声明的常量必须初始化,而let声明的变量不用
const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let定义的变量值可以修改

--------------------------题目
1
this指向
第一个例子很简单。 调用 test对象中的 func(),因此func() 中的’this’指向的是 test 对象,所以打印的 prop 是 test 中的 prop,即 42。

var test = {
 prop: 42,
func: function(){
 return this.prop;
},
 };
console.log (test.func()); // 42

如果我们直接调用getFullname函数,第二个例子将打印出’David Jones’,因为此时 this 找不到调用者,所以默认就为 window 对象,打印的 fullname 即是全局的。

var fullname = ‘David Jones’
var obj ={
fullname: ‘Colin Brown’,
prop:{
  fullname:’Aurelio Deftch’,
  getFullname: function(){
    return this.fullname;
  }
 }
}
var test = obj.prop.getFullname
console.log(test()) // David Jones
obj.prop.getFullname() // ‘Aurelio Deftch’ 

2
如何区分声明函数和表达式函数

console.log(foo)
console.log(bar)
// 声明函数
function bar(){ 
    // Some code
}; 
// 表达式函数  
var foo = function(){ 
    // Some code
}; 
输出为

undefined
function bar(){ 
    // Some code
}; 

两个函数将在不同的时期定义。在解析期间定义声明,在运行时定义表达式;

3
方法二 怎么判断一个object是否是数组(array)?
使用 原型链 来完成判断

function isArray(obj){
    return obj.__proto__ === Array.prototype;
}

基本思想是利用 实例如果是某个构造函数构造出来的那么 它的 __proto__是指向构造函数的 prototype属性。
方法二:
使用Object.prototype.toString.call(obj) =="[object Array]"
typeof运算符缺陷: 对null返回是’object’

4
下面代码输出什么?

var output = (function(x){
    delete x;
    return x;
})(0);
  
console.log(output);

输出是 0。 delete 操作符是将object的属性删去的操作。但是这里的 x 是并不是对象的属性, delete 操作符并不能作用。

5
.Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

 hasOwnProperty  <面试说:prototype是函数一个属性  能让你new出来对象共享原型链上的属性和方法>

javaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。

6
立即执行函数.
此类函数没有声明,再一次执行过后即释放。适合做初始化工作

//立即执行函数 也会有预编译的过程
var num = (function(a,b,c){
        var d= a+b+c*2-2;
        return d;

}(1,2,3))

立即执行函数的两种写法
(function(){}()); W3C 建议第一种
(function(){})();

7

parseInt('1.9');   parseInt('1.9hello');
Number('1.9');  isNaN('1.9hello');
1(不四舍五入)  NaN 1.9 true

8 在这里插入图片描述
JSON.stringify深拷贝的缺点
9 const:值类型不可变 , 引用类型可变在这里插入图片描述
10 JS Context上下文
对于JavaScript的简单理解
ES6一些内容的简单理解

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值