前端面试题之JavaScript第二篇(持续更新)

JavaScript第二篇

1.JavaScript中使用的push方法是什么

push方法用于将一个或多个元素添加或附加到数组的末尾。使用这种方法,可以通过传递多个参数来附加多个元素。

let arr = [1, 2, 3, 4, 5]
arr.push(6)
console.log(arr)  // [1, 2, 3, 4, 5, 6]

2.什么是JavaScript的unshift方法

Unshift方法就像在数组开头工作的push方法。该方法用于将一个或多个元素添加到数组的开头。

let arr = [1, 2, 3, 4, 5]
arr.unshift(-1)
console.log(arr)  // [-1, 1, 2, 3, 4, 5]

3.对象属性如何分配

let obj = {}
// 方式一
obj.name = 'web_chicken'
console.log(obj)  // name: "web_chicken"
// 方式二
obj["name"] = 'web_chicken'
console.log(obj)  // name: "web_chicken"

4.获得checkbox状态的方式是什么

  
  

5.解释window.onload和onDocumentReady

在载入页面的所有信息之前,不运行onload函数。这导致在执行任何代码之前会出现延迟。

onDocumentReady在加载DOM之后加载代码。这允许早期的代码操纵。

6.如何解释JavaScript中的闭包

JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。

例如下面的例子:

var foo = function(){
    var name = "exe";
    return function inner(){
        console.log( name );
    }
}
var bar = foo();//这里得到的是函数inner的引用,而不是那一坨代码
bar();//这里开始执行inner函数,回头看看上面加粗的那句话

闭包就是跨作用域访问变量 —— 内部作用域可以保持对外部作用域中变量的引用从而使得(更)外部作用域可以访问内部作用域中的变量。

什么是闭包?

简单来说,闭包是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数。

为什么需要闭包?

局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染。

特点

  • 占用更多内存
  • 不容易被释放

何时使用?

变量既想反复使用,又想避免全局污染

如何使用?

  1. 定义外层函数,封装被保护的局部变量。
  2. 定义内层函数,执行对外部函数变量的操作。
  3. 外层函数返回内层函数的对象,并且外层函数被调用,结果保存在一个全局的变量中。

7.一个值如何附加到数组

可以以给定的方式将值附加到数组:

let arr = ['1', '2']
arr[arr.length] = 'add'
console.log(arr)  //  ["1", "2", "add"]

8.如何解释for-in循环

for-in循环用于循环对象的属性。

for-in循环的语法是:

let obj = [
   { id: 1, title: '第一条数据' },
   { id: 2, title: '第二条数据' },
    { id: 3, title: '第三条数据' }
]
for (id in obj) {
   console.log(obj[id])  // {id: 1, title: "第一条数据"}
}

在每次循环中,来自对象的一个属性与变量名相关联,循环继续,直到对象的所有属性都被耗尽。

9.描述JavaScript中的匿名函数

被声明为没有任何命名标识符的函数被称为匿名函数。一般来说,匿名函数在声明后无法访问。

匿名函数声明:

var f1 = function () {
  console.log('fl')
}
f1()  // 不调用不执行

9.call()和apply()之前有什么区别?

函数call()和applay()在使用上非常相似 ,只是有一点区别

  • 当知道参数编号时,使用call() 因为他们必须在调用语句中被提及为参数
  • 当不知道数字时使用apply() 函数apply期望参数为数组

10.定义事件冒泡

JavaScript允许DOM元素嵌套在一起。

在这种情况下,如果单击子级的处理程序,父级的处理程序也将执行同样的工作。

<div class="box">
  <div class="little"></div>
</div>

<script>
  document.querySelector('.little').addEventListener('click', () => {
    alert('单击')
  })
  document.querySelector('.box').addEventListener('click', () => {
    console.log('冒泡了')
  })
</script>

我们发现 当我们点击小盒子的时候 控制台会输出‘冒泡了’ 这就是一个简单的冒泡案例

11.什么样的布尔运算符可以再JavaScript中使用

  • “And”运算符(&&)
  • 'Or’运算符(||)
  • 'Not’运算符(!)
  • *运算符没有括号
	let a = 10
    let b = 20
    console.log(a !== b)  // true
    let c = true
    let d = false
    console.log(d || c)  // true
    let e = true
    let f = false
    console.log(e && f)  // false

12.JavaScript中如何使用事件处理程序?

事件是由用户生成活动(例如单击链接或填写表单)导致的操作。需要一个事件处理程序来管理所有这些事件的正确执行。事件处理程序是对象的额外属性。此属性包括事件的名称以及事件发生时采取的操作。

13.解释延迟脚本在JavaScript中的作用?

默认情况下,在页面加载期间,HTML代码的解析将暂停,直到脚本停止执行。这意味着,如果服务器速度较慢或者脚本特别沉重,则会导致网页延迟。在使用Deferred时,脚本会延迟执行直到HTML解析器运行。这减少了网页加载时间,并且它们的显示速度更快。

14.JavaScript中的各种功能组件是什么?

JavaScript中的不同功能组件是:

  • First-class函数:JavaScript中的函数被用作第一类对象。这通常意味着这些函数可以作为参数传递给其他函数,作为其他函数的值返回,分配给变量,也可以存储在数据结构中。
  • 嵌套函数:在其他函数中定义的函数称为嵌套函数。

15.解释unshift()方法

该方法在数组启动时起作用,与push()不同。 它将所需数量的元素添加到数组的顶部。

    let arr = [2, 3, 4, 5, 6]
    arr.unshift(1)
    console.log(arr) //  [1, 2, 3, 4, 5, 6]

16.为什么不建议在JavaScript中使用innerHTML?

innerHTML内容每次刷新,因此很慢。

在innerHTML中没有验证的余地,因此,更容易在文档中插入错误代码,从而使网页不稳定。

17. Void(0)怎么用?

  • Void(0)用于防止页面刷新,并在调用时传递参数“zero”。
  • Void(0)用于调用另一种方法而不刷新页面。
  <a href="javascript:void(0)">跳转</a>
  <a href="javascript:;">跳转</a>

你可能感兴趣的:(js,JavaScript,web前端,新星计划,js,javascript,前端,面试题)