1、作用域经典面试题
 var num = 123;
// f1函数写好了,作用域就定下来了,也就是作用域链定下来了
// f1函数作用域链: f1函数作用域 ==> 全局作用域
function f1() {
console.log(num); // 123
}
function f2() {
var num = 456;
f1();
}
f2(); //打印啥?

 var num = 123
function f1(num) {
// 形参:理解成函数内声明的局部变量
// var num = 实参; 456
console.log(num) // 456
}
function f2() {
var num = 456;
f1(num); // num实参 f1(456)
}
f2()
 var num = 123
function f1(num) {
// var num = 实参; // undefined
console.log(num); // undefined
}
function f2() {
var num = 456;
f1();
}
f2()
var num = 123
function f1() {
console.log(num); // 123
}
function f2() {
var num = 456;
f1(num);
}
f2();

细节:

    //  1. 预解析(函数内的代码执行之前也要预解析)
    //  2. 函数内的形参理解: 理解成函数内声明的局部变量
    //  3. 函数作用域在函数写好的时候就已经确定下来了,作用域链就已经定下来了。
 
var num1 = 10;
var num2 = 20;
function fn(num1) {
// var num3; // 预解析
// var num1 = 实参; // undefined // 形参的理解
num1 = 100; // 修改的局部num1为100;
num2 = 200; // 修改的全局num2为200;
num3 = 300; // 修改的局部num3为300;
console.log(num1); // 100
console.log(num2); // 200
console.log(num3); // 300
var num3;
}
fn();
console.log(num1); // 10
console.log(num2); // 200
console.log(num3); // error*/
var num = 10;
fn1();
function fn1() {
console.log(num); // undefined
var num = 20;
console.log(num); //20
}
console.log(num); // 10

-------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------

2、预解析经典面试题

 function fn1() {
// 函数内的代码在执行之前也要经过预解析
var num; // 预解析
console.log(num); // undefined
num = 20; // 修改局部num为20
console.log(num); // 20
}
var num; num = 10; // 修改全局num为10
fn1();
console.log(num); // 10
 var num = 10;
fn1();
function fn1() {
console.log(num); // 10
num = 20; // 修改全局的num为20
console.log(num); // 20
}
console.log(num); // 20

-------------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------------------------------

 封装console.log功能,封装成clg函数
 
 难点:console.log()里面的参数是不定的;封装的clg函数,形参的个数就无法确定

   // 以下代码未完成功能,可以在以下代码基础上完成封装功能
function clg(str, str2, str3){
console.log(str, str2, str3);
}
clg("哈哈", "嘻嘻", "呜呜", "呜呜", "嘤嘤", "嘿嘿");
// console.log("哈哈", "嘻嘻", "呜呜", "嘤嘤", "嘿嘿");
function clg(){
// console.log(arguments); // 打印arguments整体
// 打印arguments里面的每一项
console.log.apply(arguments, arguments);
// 等价于:
// arguments.log("哈哈", "嘻嘻", "呜呜", "呜呜", "嘤嘤", "嘿嘿");
}
clg("哈哈", "嘻嘻", "呜呜", "呜呜", "嘤嘤", "嘿嘿");
在以上clg函数基础上增加功能
function clg2(){
// 思路: 给arguments伪数组在头部前面添加 "友情提示:" unshift()
// arguments借用unshift方法实现添加功能
[].unshift.call(arguments, "友情提示:");
// console.log( arguments );
// 等价于:
// arguments.unshift("友情提示:");
console.log.apply(arguments, arguments);
}
// clg2("哈哈", "嘻嘻", "呜呜"); // 打印的时候是这样的 "友情提示:" 哈哈 嘻嘻 呜呜
// clg2("aa", "bb", "cc", 10); // 希望:这样调用打印的效果和下面代码效果一样
// clg2("友情提示:", "aa", "bb", "cc"); // 就是封装console.log的时候,第一个参数可以随便写
// call apply的第一个参数是用来修改this指向的
// 求和
function sum(n1, n2){
console.log(n1 + n2);
}
sum.call(null, 10, 20);
sum.apply(undefined, [10, 20]);

注:以上内容均为个人学习时所整理笔记

JavaScript之经典面试题的更多相关文章

  1. JAVASCRIPT中经典面试题

    //1.try catch finally中的return var n=1; function fun(){ try{ n++; m++;//报错 return n; }catch(err){ n++ ...

  2. JavaScript经典面试题(二)

    前言: 近年来T行业就业者越来越多,有关于编程行业的高薪工作也变得越来越难找,竞争力越来越大,想要在众多的应聘者当中脱颖而出,面试题和笔试题一定要多加研究和琢磨,以下记录的是自己的面试过程之中遇到的一 ...

  3. 20道JavaScript经典面试题

    该篇文章整理了一些前端经典面试题,附带详解,涉及到JavaScript多方面知识点,满满都是干货-建议收藏阅读 前言 如果这篇文章有帮助到你,️关注+点赞️鼓励一下作者,文章公众号首发,关注 前端南玖 ...

  4. 李洪强iOS经典面试题147-WebView与JS交互

    李洪强iOS经典面试题147-WebView与JS交互   WebView与JS交互 iOS中调用HTML 1. 加载网页 NSURL *url = [[NSBundle mainBundle] UR ...

  5. jQuery经典面试题及答案精选(转)

    jQuery是一款非常流行的Javascript框架,如果你想要从事Web前端开发这个岗位,那么jQuery是你必须掌握而且能够熟练应用的一门技术.本文整理了一些关于jQuery的经典面试题及答案,分 ...

  6. web前端经典面试题大全及答案

    阅读目录 JavaScript部分 JQurey部分 HTML/CSS部分 正则表达式 开发及性能优化部分 本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在 ...

  7. 经典面试题:从 URL 输入到页面展现到底发生什么?

    前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 本文首发地址为GitHub 博客,写文章不易,请多多支持与关注 ...

  8. 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3

    备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...

  9. 【ASP.NET Core】EF Core - “影子属性” 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1

    [ASP.NET Core]EF Core - “影子属性”   有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. ...

随机推荐

  1. kafka producer 概要(看源码前,最好能掌握)

        kafakproducer概要(看源码前,最好能理解) 摘要 kafak 被设计用来作为一个统一的平台来处理庞大的数据的实时工具,在设计上有诸多变态的要求 它必须具有高吞吐量才能支持大量事件流 ...

  2. 第三十七章、PyQt输入部件:QAbstractSlider派生类QScrollBar滚动条、QSlider滑动条、QDial刻度盘功能介绍

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 Designer中的输入部件Horizo ...

  3. 转:Python常见字符编码及其之间的转换

    参考:Python常见字符编码 + Python常见字符编码间的转换 一.Python常见字符编码 字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Cod ...

  4. 第10.3节 Python导入模块能否取消导入?

    模块导入后,是否可以取消导入?实际上当模块导入后,是无法逆向还原到导入前的状态的,但是可以利用"del 模块名"进行导入模块的删除,此时的删除只是删除了导入模块对应的模块变量名,删 ...

  5. 第14.1节 通过Python爬取网页的学习步骤

    如果要从一个互联网前端开发的小白,学习爬虫开发,结合自己的经验老猿认为爬虫学习之路应该是这样的: 一. 了解HTML语言及css知识 这方面的知识请大家通过w3school 去学习,老猿对于html总 ...

  6. jenkins+git部署环境,出现Failed to connect to repository : Command "git ls-remote -h http://gitlab.xxxxx.git HEAD" returned status code 128stdout: stderr: fatal: repository 'http://gitlab.xxxxx.git' not fou

    1.部署jenkins+git源码管理的方式,源码管理报128stdout 源码管理出现如下错误: Failed to connect to repository : Command "gi ...

  7. IDM 汉化版v1.1.10 (NDM汉化版)

    提升你的下载速度最多达 5 倍,安排下载时程,或续传一半的软件.Internet Download Manager 的续传功能可以恢复因为断线.网络问题.计算机当机甚至无预警的停电导致下传到一半的软件 ...

  8. zookeeper未授权访问渗透测试及修复方法

    zookeeper未授权访问危害 服务器信息泄露.集群被破坏 一. 四字命令未授权使用 1.1 测试 工具:netcat ,Linux或Windows都可以测 命令行输入echo envi | nc ...

  9. kylin的实现原理

    摘自https://blog.bcmeng.com/post/kylin-cube.html#kylin%E7%9A%84%E9%A2%84%E8%AE%A1%E7%AE%97%E6%98%AF%E5 ...

  10. FreeSql.Repository (一)什么是仓储

    欢迎来到<FreeSql.Repository 仓储模式>系列文档,完整文档请前往 wiki 中心:https://github.com/dotnetcore/FreeSql/wiki F ...