前端面试题精选(7)

四十二:js 事件委托

四十三:ajax 请求的时候 get 和 post 方式的区别?

1、get 一般用来进行查询操作,url 地址有长度限制,请求的参数都暴露在 url 地址当中, 如果传递中文参数,需要自己进行编码操作,

安全性较低。

2、post 请求方式主要用来提交数据,没有数据长度的限制,提交的数据内容存在于 http 请求体中,数据不会暴漏在 url 地址中。

四十四:解释 jsonp 的原理,以及为什么不是真正的 ajax

1、Jsonp 并不是一种数据格式,而 json 是一种数据格式,jsonp 是用来解决跨域获取数据 的一种解决方案,

具体是通过动态创建 script 标签,然后通过标签的 src 属性获取 js 文件 中的 js 脚本,该脚本的内容是一个函数调用,

参数就是服务器返回的数据,为了处理这些 返回的数据,需要事先在页面定义好回调函数,本质上使用的并不是 ajax 技术。

四十五:我们给一个 dom 同时绑定两个点击事件,一个用捕获,一个用冒泡,你来说 下会执行几次事件,然后会先执行冒泡还是捕获?

1、冒泡机制的执行顺序是自下往上的,当目标元素绑定的事件被触发时,事件会从目标元素自下向上依次执行。

2、捕获机制的执行顺序是自上往下的,当目标元素绑定的事件被触发时,事件会从 DOM 树最顶层自上向下依次执行,直到执行到目标元素为止。

四十六:想实现一个对页面元素的拖拽,请说说思路,以及用原生 JS 写一个相关案例

思路:

1. 给需要拖拽的节点绑定 mousedown, mousemove, mouseup 事件

2. mousedown 事件触发后,开始拖拽

3. mousemove 时,需要通过 event.clientX 和 clientY 获取拖拽位置,并实时更新位置

4. mouseup 时,拖拽结束

5. 需要注意浏览器边界的情况

实例代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        div {
            width: 100px;
            height: 100px;
            background-color: red;
            position: absolute;
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>
<script>
    var div_ = document.getElementsByTagName('div')[0];
    div_.onmousedown = function (e) {
        //获取当前的事件 window.event
        e = e || window.event;
        var offsetX_ = e.offsetX;
        var offsetY_ = e.offsetY;
        console.log(offsetX_, offsetY_);
        document.onmousemove = function (e) {
            e = e || window.event;
            console.log(e.clientX)
            div_.style.left = (e.clientX - offsetX_) + 'px';
            div_.style.top = (e.clientY - offsetY_) + 'px';
        }
    }
    div_.onmouseup = function () {
        document.onmousemove = '';
        // document.onmousemove = null;
    }
</script>

四十七:javascript 代码中的"use strict";是什么意思 ? 使用时它区别是什么?

1、全局变量显式声明

2、静态绑定

3、禁止使用 with 语句

4、eval 中定义的变量都是局部变量

5、禁止 this 关键字指向全局对象

6、禁止在函数内部遍历调用栈

7、严格模式和正常模式下的对比:

1、严格模式下无法删除变量。只有 configurable 设置为 true 的对象属性,才能被删除

2、正常模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。

严格模式下, 将报错。

3、严格模式下,对一个使用 getter 方法读取的属性进行赋值,会报错。

4、严格模式下,对禁止扩展的对象添加新属性,会报错。

5、严格模式下,删除一个不可删除的属性,会报错。

6、正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下, 这属于语法错误。

7、正常模式下,如果函数有多个重名的参数,可以用 arguments[i]读取。严格模式下,这属于 语法错误。

8、正常模式下,整数的第一位如果是 0,表示这是八进制数,比如 0100 等于十进制的 64。严格模式禁止这种表示法,整数第一位为 0,将报错。 不允许对 arguments 赋值 arguments 不再追踪参数的变化禁止使用 arguments.call

9、严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的 代码块内声明函数

10、严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。

四十八:new 操作符具体干了什么呢?

1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。

2、属性和方法被加入到 this 引用的对象中。

3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

4、通过‘new’可以调用使用内置对象的方法。

四十九:documen.write 和 innerHTML 的区别?

1、document.write 是重写整个 document, 写入内容是字符串的 html

2、innerHTML 是 HTMLElement 的属性,是一个元素的内部 html 内容

五十:Object 对象的常用方法?

Object.hasOwnProperty( ) 检查属性是否被继承

Object.isPrototypeOf( ) 一个对象是否是另一个对象的原型

Object.propertyIsEnumerable( ) 是否可以通过 for/in 循环看到属性

Object.toLocaleString( ) 返回对象的本地字符串表示

Object.toString( ) 定义一个对象的字符串表示

Object.valueOf( ) 指定对象的原始值

五十一:JavaScript 中的作用域与变量声明提升?

理解 JavaScript 的预解析机制。

js 的运行主要分两个阶段:

js 的预解析和运行,预解析阶段所有的变量声明和函数定义都会提前,但是变量的赋值不会提前

五十二:请说一下箭头函数和普通的函数区别?

1、首先是写法不一样

2、箭头函数是匿名函数,不能称为构造函数。

在这个基础面试官再问:箭头函数为什么不能作为构造函数?或者说为什么箭头函数不能 new?

答:因为箭头函数的 this 指向父级,而普通函数的 this 如果在全局,指的就是 window ,如果在局部作用域则指向当前的对象。

3、普通函数可以通过class 来创造构造函数,核心还是与构造函数的写法的类似。

4、为什么箭头函数里面没有super,因为super 必须要写在构造函数里面,箭头函数不是个构造函数,所有super必须写在箭头函数中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值