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. Java基础教程——RunTime类

    RunTime类 java.lang.RunTime类代表Java程序的运行时环境. 可以进行垃圾回收(gc()),可以进行系统资源清理(runFinalization()): 可以加载文件(load ...

  2. LeetCode 037 Sudoku Solver

    题目要求:Sudoku Solver Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells ...

  3. 【NOIP2017提高A组模拟9.17】组合数问题

    [NOIP2017提高A组模拟9.17]组合数问题 题目 Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个 ...

  4. Spring Cloud Alibaba 初体验(二) Nacos 服务注册与发现 + 集成 Spring Cloud Gateway

    一.服务注册 添加依赖: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>s ...

  5. 初学者刚学c++在定义类时只有成员变量易犯的错误

    ------------------------ #include<iostream> using namespace std;//c++的命名空间 class circle { publ ...

  6. Qt中,将以png为格式的图片在按钮控件上显示

    在Qt编程中,我们常常会遇见这样或那样的小问题,这里,我介绍一个将png为格式的图片在按钮控件上显示的小功能. resistanceBtn = new QPushButton(element); re ...

  7. moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理和可能遇到的坑

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中toolBar的allowedAreas属性

    1.概述 allowedAreas属性指定工具栏允许移动的范围,其类型为枚举类Qt.ToolBarAreas,有如下取值: 以上取值可以同or操作组合使用. 2.访问方法 缺省值为Qt.AllTool ...

  9. 直接插入排序(python实现)

    这篇博文用来介绍直接插入排序 直接插入排序基本思想: 每次将一个待排序的记录插入到已经排好序的数据区中,直到全部插入完为止 直接插入排序算法思路: 在直接插入排序中,数据元素分为了有序区和无序区两个部 ...

  10. Robot framework 环境搭建+图标处理

    场景:随着现在项目各种赶工,很多时候界面上的功能还没有实现,这时就可以先对接口进行验证,提早发现一些和预期不一致的错误. Robot framework需要的几个知识点: 测试库:RF是大树,测试库就 ...