| 功能 | Workerman | Swoole | Spring Boot | Go | PHP-FPM | Java (传统) | ReactPHP | 
|---|---|---|---|---|---|---|---|
| 并发模型 | 基于多进程和事件循环 | 基于协程和异步 I/O | 基于线程池的并发模型 | 基于 goroutines 和 channels(轻量级协程) | 基于进程和线程池,适合 Web 应用 | 基于多线程,传统的 JVM 模型 | 基于事件驱动,单线程非阻塞模型 | 
| WebSocket 支持 | 支持 WebSocket | 支持 WebSocket 和长连接 | 支持 WebSocket(需要额外依赖) | 支持 WebSocket | 支持 WebSocket,依赖于 Nginx 或 Apache | 支持 WebSocket,通常需要框架支持 | 支持 WebSocket,原生支持 | 
| HTTP 支持 | 支持 HTTP 服务,适合 RESTful API 和传统 Web 应用 | 高性能 HTTP 支持,支持 HTTP/2 和长连接 | 支持 HTTP 服务,主要面向 RESTful API 和微服务架构 | 支持 HTTP 服务,适合高并发 Web 应用 | 支持 HTTP 服务,适合 Web 应用 | 支持 HTTP 服务(通过 Servlet 容器) | 支持 HTTP 服务,适用于高并发场景 | 
| TCP/UDP 支持 | 支持 TCP 和 UDP 协议 | 支持 TCP、UDP、Unix Socket 协议 | 主要支持 TCP(通过额外配置) | 支持 TCP、UDP 和 Unix Socket 协议 | 支持 TCP(通常通过 Nginx 配置反向代理) | 支持 TCP,使用传统的 Socket 编程 | 支持 TCP 和 UDP,适合异步处理 | 
| 异步 I/O | 支持异步 I/O | 强大的异步 I/O 和协程 I/O | 基于 Spring 的异步支持,需要额外配置 | 异步 I/O 基于协程(goroutines)实现 | 支持异步 I/O(通过 Swoole、ReactPHP 等) | 需要手动处理异步 I/O,使用线程池或外部库 | 原生异步 I/O,通过事件循环机制 | 
| 协程支持 | 无 | 完整的协程支持,适合处理 I/O 密集型任务 | 无直接支持,使用线程池处理并发任务 | 原生协程(goroutines),支持并发高效处理 | 通过 Swoole 实现协程支持 | 基于线程池或外部库支持并发任务 | 不原生支持协程,但可通过事件循环实现异步 | 
| 任务调度 | 支持定时任务、任务池和工作池 | 支持定时器、定时任务和异步任务调度 | 支持定时任务和任务调度(通过 @Scheduled注解) | 可通过 goroutines 实现自定义任务调度 | 支持定时任务和任务调度(通过 cron 或 Swoole) | 支持任务调度(通过 Quartz 或自定义实现) | 支持定时任务(通过定时器和事件循环) | 
| 数据库支持 | 提供同步数据库连接(MySQL、Redis) | 提供异步数据库操作(MySQL、PostgreSQL、Redis) | 支持多种数据库(通过 JPA、JdbcTemplate、MyBatis 等) | 支持数据库连接池,流行的 ORM(如 GORM) | 支持数据库连接,适合小型到中型应用 | 支持数据库连接,适合大规模应用 | 提供数据库连接支持,通常配合异步数据库驱动 | 
| 微服务支持 | 不支持 | 支持 RPC 和消息队列,适合微服务架构 | 强大的微服务支持(Spring Cloud、Spring Boot Starter) | 通过 gRPC、HTTP 服务和消息队列构建微服务架构 | 通过扩展支持(如 Swoole) | 支持微服务架构(Spring Cloud、Spring Boot) | 适合构建高性能的微服务,支持消息队列等 | 
| 进程管理 | 自动进程管理、进程重启 | 内建进程管理和协程管理 | 基于 JVM 管理进程,支持热部署 | 由操作系统和容器管理进程 | 由 PHP-FPM 管理进程,支持热重载 | 由操作系统和 JVM 管理进程 | 通过事件循环和进程管理支持高效调度 | 
| 服务器热更新 | 不支持 | 支持热更新,更新服务代码而无需停止服务 | 支持热部署和重启,常用于开发阶段 | 通过 CI/CD 管道和容器实现热更新 | 支持热重载(通过 PHP-FPM 或容器化部署) | 支持热部署(需要额外工具,如 Spring Boot DevTools) | 通过事件循环支持,适合开发阶段快速迭代 | 
| 内存池支持 | 不支持 | 支持内存池,提高性能 | 不支持直接内存池,但有内存管理优化(如对象池) | 原生支持内存管理,适合高性能应用 | PHP-FPM 不提供内存池支持,但可通过优化提升性能 | 传统 Java 使用对象池或 JVM 内存管理 | 无直接内存池支持,依赖事件循环管理内存 | 
| 高性能 | 提供较高并发处理,但不如 Swoole 优化 | 强大性能,适合高并发、低延迟的应用场景 | 性能较为稳定,但不及 Swoole 和 Workerman 高效 | 非常高效,适合高并发、低延迟的网络服务 | 性能相对较低,适合中小型应用 | 性能强大,适合大规模企业级应用 | 性能较高,适合高并发的异步处理应用 | 
| 集群支持 | 支持负载均衡和反向代理 | 支持集群管理、分布式负载均衡 | 支持集群和分布式部署(Spring Cloud) | 支持负载均衡、容器化部署和 Kubernetes | 支持 Nginx 或 Apache 反向代理与负载均衡 | 支持集群和分布式部署(通过 Spring Cloud 或其他) | 适合通过 Nginx 配置反向代理和负载均衡 | 
| SSL/TLS 支持 | 支持 SSL/TLS | 支持 SSL/TLS 和加密的 WebSocket | 支持 SSL/TLS(通过配置) | 支持 SSL/TLS | 支持 SSL/TLS,依赖于 Nginx 或 Apache 配置 | 支持 SSL/TLS(通过 Tomcat 或 Jetty) | 支持 SSL/TLS,原生支持 | 
| 自定义协议支持 | 支持 | 支持自定义协议 | 支持自定义协议,但需要扩展和自定义处理 | 支持自定义协议,灵活性高 | 支持自定义协议,适合小型定制化应用 | 支持自定义协议,适合大型企业应用 | 支持自定义协议,适合异步通信和定制需求 | 
Y.J.I
Hello,everyone. I am living in Taiwan.
Thursday, October 16, 2025
高并发与异步处理框架对比:ReactPHP、Workerman、Swoole 与其他主流技术 原创 于 2025-01-23 09:37:02 发布 · 1.2k 阅读 · 18 · 20 · CC 4.0 BY-SA版权 ———————————————— 版权声明:本文为CSDN博主「Chao.java」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_43305941/article/details/145316429
Friday, October 08, 2021
https://blog.gtwang.org/iot/raspberry-pi/raspberry-pi-samba-setup-tutorial/
這裡介紹如何在樹莓派中安裝與設定 Samba 服務,以網路芳鄰的方式將目錄與檔案分享給網路上的 Windows 電腦。
如果要將樹莓派中的檔案分享給附近的 Windows 系統,最方便的做法就是透過網路芳鄰的方式,讓 Windows 直接在檔案總管中就可以使用,而在 Linux 系統上若要使用網路芳鄰的功能就要安裝 Samba 服務,以下介紹樹莓派安裝與設定 Samba 伺服器的步驟,讓我們可以在 Windows 系統上直接使用樹莓派上面的檔案。
安裝 samba 套件:
sudo apt-get install samba
將要使用 samba 分享檔案的 Linux 帳號加入 sambshare 群組:
sudo usermod -a -G sambashare pi
設定 pi 這個 samba 帳號的密碼:
sudo pdbedit -a -u pi
編輯 /etc/samba/smb.conf 設定檔,加入以下設定。首先讓連結檔都可以正常使用:
[global]
# 允許使用連結檔
follow symlinks = yes
# 允許連結到目錄之外
wide links = yes
# 關閉 CIFS UNIX extensions
unix extensions = no
再將 pi 家目錄分享出來:
[pi]
comment = pi's home
path = /home/pi
read only = no
guest ok = no
browseable = yes
create mask = 0644
directory mask = 0755
接著重新啟動 samba 服務:
service smbd restart
這樣就完成 samba 的設定了。
在 Windows 中我們可以在檔案總管的網址列輸入兩個反斜線加上樹莓派的 IP 位址:
192.168.0.150
這樣就可以透過網路芳鄰存取樹莓派中的檔案了,打開這個位址時,應該就會看到 pi 的家目錄。
網路芳鄰
點擊進入 pi 目錄時,就輸入剛剛設定的 Samba 密碼。
輸入 samba 帳號與密碼
經過認證登入之後,就可以讀取或是寫入樹莓派中的目錄與檔案了。
網路芳鄰分享檔案
透過 Samba 分享的目錄與檔案除了 Windows 可以存取之外,在 Mac OS X 與 Linux 系統上也可以使用,只不過網址的寫法有些不同,在 Mac OS X 與 Linux 中要這樣寫:
smb://192.168.0.150/pi
Tuesday, December 10, 2019
Wednesday, July 03, 2019
How to set default img for html tag with CSS solution 设定HTML img预设图的CSS解决方案
HTML
<img src='google.com/ggg.png' class='b' alt=' '>
CSS
.b{
  display: block;
  border: 1px solid blue;
  position: relative;
  width: 500px;
  height: 300px;
}
.b::before{
  display: block;
  position: absolute;
  z-index: 5;
  left: 0;
  top: 0;
  width: 500px;
  height: 300px;
  background: url(https://www.wowza.com/uploads/images/WebRTC.gif) center top;
  content: ' ';
} 
Thursday, October 11, 2018
Javascript interview questions
https://www.toptal.com/javascript/interview-questions
123-JavaScript-Interview-Questions
Want to buy a book in paper form? Want some badass flashcards?
- This Book will be completed by September 2018 and then it will be available to buy. If you want me to sent an early copy of this book, please add your name and email address in google form here Google Form.
- If you don't want to wait, you can buy Yuri's JavaScript Flashcards, a set of frontend interview questions sorted by popularity among the interviewers printed on beautiful poker-size flashcards.
Question 1. What's the difference between undefined and not defined in JavaScript
Answer
var name is not defined and the script will stop execute thereafter. But If you use typeof undeclared_variable then it will return undefined.var x is a declaration because you are not defining what value it holds yet, but you are declaring its existence and the need for memory allocation.var x; // declaring x
console.log(x); // output: undefined
var x = 1 is both declaration and definition (also we can say we are doing initialisation), Here declaration and assignment of value happen inline for variable x, In JavaScript every variable declaration and function declaration brings to the top of its current scope in which it's declared then assignment happen in order this term is called hoisting.undefined.var x; // Declaration
typeof x === 'undefined'; // Will return true
not defined.console.log(y);  // Output: ReferenceError: y is not defined
Ref Link:
Question 2. For which value of x the results of the following statements are not the same?
//  if( x <= 100 ) {...}
if( !(x > 100) ) {...}
Answer
NaN <= 100 is false and NaN > 100 is also false, so if the value of x is NaN, the statements are not the same.undefined, [1,2,5], {a:22} , etc.NaN can’t be equal, less than or more than any other numeric value, so the only reliable way to check if the value is NaN, is to use isNaN() function.Question 3. What is the drawback of declaring methods directly in JavaScript objects?
Answer
var Employee = function (name, company, salary) {
  this.name = name || "";       
  this.company = company || "";
  this.salary = salary || 5000;
  // We can create a method like this:
  this.formatSalary = function () {
      return "$ " + this.salary;
  };
};
// we can also create method in Employee's prototype:
Employee.prototype.formatSalary2 = function() {
    return "$ " + this.salary;
}
//creating objects
var emp1 = new Employee('Yuri Garagin', 'Company 1', 1000000);
var emp2 = new Employee('Dinesh Gupta', 'Company 2', 1039999);
var emp3 = new Employee('Erich Fromm', 'Company 3', 1299483);
emp1, emp2, emp3 has own copy of formatSalary method. However the formatSalary2 will only be added once to an object Employee.prototype.Question 4. What is “closure” in javascript? Can you provide an example?
Answer
- Variable declared in his own scope
- Variable declared in parent function scope
- Variable declared in the global namespace
var globalVar = "abc";
// Parent self invoking function
(function outerFunction (outerArg) { // begin of scope outerFunction
  // Variable declared in outerFunction function scope
  var outerFuncVar = 'x';    
  // Closure self-invoking function
  (function innerFunction (innerArg) { // begin of scope innerFunction
    // variable declared in innerFunction function scope
    var innerFuncVar = "y";
    console.log(         
      "outerArg = " + outerArg + "\n" +
      "outerFuncVar = " + outerFuncVar + "\n" +
      "innerArg = " + innerArg + "\n" +
      "innerFuncVar = " + innerFuncVar + "\n" +
      "globalVar = " + globalVar);
  // end of scope innerFunction
  })(5); // Pass 5 as parameter
// end of scope outerFunction
})(7); // Pass 7 as parameter
innerFunction is closure which is defined inside outerFunction and has access to all variable which is declared and defined in outerFunction scope. In addition to this function defined inside the function as closure has access to the variable which is declared in global namespace.outerArg = 7
outerFuncVar = x
innerArg = 5
innerFuncVar = y
globalVar = abc
Question 5. Write a mul function which will work properly when invoked with following syntax.
console.log(mul(2)(3)(4)); // output : 24
console.log(mul(4)(3)(4)); // output : 48
Answer
function mul (x) {
  return function (y) { // anonymous function
    return function (z) { // anonymous function
      return x * y * z;
    };
  };
}
mul function accepts the first argument and returns the anonymous function which takes the second parameter and returns the anonymous function which takes the third parameter and returns the multiplication of arguments which is being passed in successive- A function is an instance of the Object type
- A function can have properties and has a link back to its constructor method
- A function can be stored as variable
- A function can be pass as a parameter to another function
- A function can be returned from another function
Question 6. How to empty an array in JavaScript?
var arrayList =  ['a', 'b', 'c', 'd', 'e', 'f'];
Answer
Method 1
arrayList = [];
arrayList to a new empty array. This is recommended if you don't have references to the original array arrayList anywhere else because It will actually create a new empty array. You should be careful with this way of empty the array, because if you have referenced this array from another variable, then the original reference array will remain unchanged, Only use this way if you have only referenced the array by its original variable arrayList.var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array
var anotherArrayList = arrayList;  // Referenced arrayList by another variable
arrayList = []; // Empty the array
console.log(anotherArrayList); // Output ['a', 'b', 'c', 'd', 'e', 'f']
Method 2
arrayList.length = 0;
var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array
var anotherArrayList = arrayList;  // Referenced arrayList by another variable
arrayList.length = 0; // Empty the array by setting length to 0
console.log(anotherArrayList); // Output []
Method 3
arrayList.splice(0, arrayList.length);
var arrayList = ['a', 'b', 'c', 'd', 'e', 'f']; // Created array
var anotherArrayList = arrayList;  // Referenced arrayList by another variable
arrayList.splice(0, arrayList.length); // Empty the array by setting length to 0
console.log(anotherArrayList); // Output []
Method 4
while(arrayList.length) {
  arrayList.pop();
}
Question 7. How to check if an object is an array or not?
Answer
toString method from Object.prototypevar arrayList = [1 , 2, 3];
greet which can take a single string and also a list of strings. To make our greet method workable in both situation we need to know what kind of parameter is being passed: is it single value or list of values?function greet(param) {
  if() {
    // here have to check whether param is array or not
  }
  else {
  }
}
 function greet(param) {
   if(typeof param === 'string') {
   }
   else {
     // If param is of type array then this block of code would execute
   }
 }
single value, array, and object type then we will be in trouble.Object.prototype.toStringif(Object.prototype.toString.call(arrayList) === '[object Array]') {
  console.log('Array!');
}
jQuery then you can also used jQuery isArray method:if($.isArray(arrayList)) {
  console.log('Array');
} else {
  console.log('Not an array');
}
Object.prototype.toString.call internally to check whether an object is an array or not.Array.isArray(arrayList);
Array.isArray is supported by Chrome 5, Firefox 4.0, IE 9, Opera 10.5 and Safari 5Question 8. What will be the output of the following code?
var output = (function(x) {
  delete x;
  return x;
})(0);
console.log(output);
Answer
0 as output. delete operator is used to delete a property from an object. Here x is not an object it's local variable. delete operator doesn't affect local variables.Question 9. What will be the output of the following code?
var x = 1;
var output = (function() {
  delete x;
  return x;
})();
console.log(output);
Answer
1 as output. delete operator is used to delete a property from an object. Here x is not an object it's global variable of type number.Question 10. What will be the output of the following code?
var x = { foo : 1};
var output = (function() {
  delete x.foo;
  return x.foo;
})();
console.log(output);
Answer
undefined as output. delete operator is used to delete a property from an object. Here x is an object which has foo as a property and from a self-invoking function, we are deleting the foo property of object x and after deletion, we are trying to reference deleted property foo which result undefined.Question 11. What will be the output of the following code?
var Employee = {
  company: 'xyz'
}
var emp1 = Object.create(Employee);
delete emp1.company
console.log(emp1.company);
Answer
xyz as output. Here emp1 object got company as prototype property. delete operator doesn't delete prototype property.emp1 object doesn't have company as its own property. you can test it console.log(emp1.hasOwnProperty('company')); //output : false However, we can delete company property directly from Employee object using delete Employee.company or we can also delete from emp1 object using __proto__ property delete emp1.__proto__.company.
Question 12. What is undefined x 1 in JavaScript
var trees = ["redwood", "bay", "cedar", "oak", "maple"];
delete trees[3];
Answer
- When you run the code above and do console.log(trees);in chrome developer console then you will get["redwood", "bay", "cedar", undefined × 1, "maple"].
- In the recent versions of Chrome you will see the word emptyofundefined x 1.
- When you run the same code in Firefox browser console then you will get ["redwood", "bay", "cedar", undefined, "maple"]
trees[3] === undefined in any browser you will get similar output as true.trees[3] === 'undefined × 1' it will give an error because 'undefined × 1' this is just way of displaying an uninitialized index of an array in chrome.Question 13. What will be the output of the following code?
var trees = ["xyz", "xxxx", "test", "ryan", "apple"];
delete trees[3];
console.log(trees.length);
Answer
5 as output. When we used delete operator for deleting an array element then, the array length is not affected by this. This holds even if you deleted all elements of an array using delete operator.undefined x 1 in chrome and undefined is placed at the index. If you do console.log(trees) output ["xyz", "xxxx", "test", undefined × 1, "apple"] in Chrome and in Firefox ["xyz", "xxxx", "test", undefined, "apple"].Question 14. What will be the output of the following code?
var bar = true;
console.log(bar + 0);   
console.log(bar + "xyz");  
console.log(bar + true);  
console.log(bar + false);
Answer
1, "truexyz", 2, 1 as output. Here's a general guideline for the plus operator:- Number + Number -> Addition
- Boolean + Number -> Addition
- Boolean + Boolean -> Addition
- Number + String -> Concatenation
- String + Boolean -> Concatenation
- String + String -> Concatenation
Question 15. What will be the output of the following code?
var z = 1, y = z = typeof y;
console.log(y);
Answer
"undefined" as output. According to associativity rule operator with the same precedence are processed based on their associativity property of operator. Here associativity of the assignment operator is Right to Left so first typeof y will evaluate first which is string "undefined" and assigned to z and then y would be assigned the value of z. The overall sequence will look like that:var z;
z = 1;
var y;
z = typeof y;
y = z;
Question 16. What will be the output of the following code?
// NFE (Named Function Expression)
var foo = function bar() { return 12; };
typeof bar();
Answer
Reference Error. To fix the bug we can try to rewrite the code a little bit:var bar = function() { return 12; };
typeof bar();
function bar() { return 12; };
typeof bar();
bar is reference variable which is pointing to anonymous function and in sample 2 we have function statement and bar is the function name.var foo = function bar() {
  // foo is visible here
  // bar is visible here
  console.log(typeof bar()); // Works here :)
};
// foo is visible here
// bar is undefined here
Question 17. What is the difference between declaring a function in the formats listed below?
var foo = function() {
  // Some code
}
function bar () {
  // Some code
}
Answer
foo is defined at run-time and is called function expression, whereas function bar is defined at parse time and is called function statement. To understand in better, let's see below code :// Run-Time function declaration
  foo(); // Call foo function here, It will give an error
  var foo = function() {
    console.log("Hi I am inside Foo");
  };
// Parse-Time function declaration
bar(); // Call bar function here, It will not give an Error
function bar() {
  console.log("Hi I am inside Foo");
}
Question 18. In which case the function definition is not hoisted in JavaScript?
Answer
 var foo = function foo() {
     return 12;
 }
var-declared variables and functions are hoisted. Let's take function hoisting first. Basically, the JavaScript interpreter looks ahead to find all the variable declaration and hoists them to the top of the function where it's declared. For example:foo(); // Here foo is still undefined
var foo = function foo() {
  return 12;
};
var foo = undefined;
foo(); // Here foo is undefined
foo = function foo() {
  // Some code stuff
}
var foo = undefined;
foo = function foo() {
  // Some code stuff
}
foo(); // Now foo is defined here
Question 19. What will be the output of the following code?
var salary = "1000$";
(function () {
  console.log("Original salary was " + salary);
  var salary = "5000$";
  console.log("My New Salary " + salary);
})();
Answer
undefined, 5000$ because of hoisting. In the code presented above, you might be expecting salary to retain it values from outer scope until the point that salary was re-declared in the inner scope. But due to hoisting salary value was undefined instead. To understand it better have a look of the following code, here salary variable is hoisted and declared at the top in function scope. When we print its value using console.log the result is undefined. Afterwards the variable is redeclared and the new value "5000$" is assigned to it.var salary = "1000$";
(function () {
  var salary = undefined;
  console.log("Original salary was " + salary);
  salary = "5000$";
  console.log("My New Salary " + salary);
})();
Question 20. What’s the difference between typeof and instanceof?
Answer
typeof is an operator that returns a string with the type of whatever you pass.typeof operator checks if a value belongs to one of the seven basic types: number, string, boolean, object, function, undefined or Symbol.typeof(null) will return object.instanceof is much more intelligent: it works on the level of prototypes. In particular, it tests to see if the right operand appears anywhere in the prototype chain of the left. instanceof doesn’t work with primitive types. It instanceof operator checks the current object and returns true if the object is of the specified type, for example:var dog = new Animal();
dog instanceof Animal; // Output : true
dog instanceof Animal is true since dog inherits from Animal.prototypevar name = new String("xyz");
name instanceof String; // Output : true
Question 21. Calculate the length of the associative array
var counterArray = {
  A : 3,
  B : 4
};
counterArray["C"] = 1;
Answer
Method 1
Object has keys method which can we used to calculate the length of object.Object.keys(counterArray).length; // Output 3
Method 2
function getLength(object) {
  var count = 0;
  for(key in object) {
    // hasOwnProperty method check own property of object
    if(object.hasOwnProperty(key)) count++;
  }
  return count;
}
Method 3
getOwnPropertyNames method, so we can calculate the length using the following code:Object.getOwnPropertyNames(counterArray).length; // Output 3
Method 4
size dedicated to calculate the object length. We don't recommend to include one of these libraries just to use the size method, but if it's already used in your project - why not?_.size({one: 1, two: 2, three: 3});
=> 3
Question 22. Difference between Function, Method and Constructor calls in JavaScript.
function helloWorld(name) {
  return "hello world, " + name;
}
helloWorld("JS Geeks"); // "hello world JS Geeks"
var obj = {
  helloWorld : function() {
    return "hello world, " + this.name;
  },
  name: 'John Carter'
}
obj.helloWorld(); // // "hello world John Carter"
helloWorld refer to this properties of obj. Here it's clear or you might have already understood that this gets bound to obj. But the interesting point that we can copy a reference to the same function helloWorld in another object and get a difference answer. Let see:var obj2 = {
  helloWorld : obj.helloWorld,
  name: 'John Doe'
}
obj2.helloWorld(); // "hello world John Doe"
this, The expression obj2.helloWorld() looks up the helloWorld property of obj and calls it with receiver object obj2.constructors are defined with function.function Employee(name, age) {
  this.name = name;
  this.age = age;
}
var emp1 = new Employee('John Doe', 28);
emp1.name; // "John Doe"
emp1.age; // 28
new Employee('John Doe', 28) creates a brand new object and passes it as the value of this, and implicitly returns the new object as its result.Question 23. What would be the output of the following code?
function User(name) {
  this.name = name || "JsGeeks";
}
var person = new User("xyz")["location"] = "USA";
console.log(person);
Answer
"USA". Here new User("xyz") creates a brand new object and created property locationon that and USA has been assigned to object property location and that has been referenced by the person.new User("xyz") created a object called foo. The value "USA" will be assigned to foo["location"], but according to ECMAScript Specification , pt 12.14.4 the assignment will itself return the rightmost value: in our case it's "USA". Then it will be assigned to person.function User(name) {
 this.name = name || "JsGeeks";
}
var person;
var foo = new User("xyz");
foo["location"] = "USA";
// the console will show you that the result of this is "USA"
Question 24. What are Service Workers and when can you use them?
Answer
Question 25. What is the difference between a method and a function in javascript?
// Function statement
function myFunc() {
  // Do some stuff;
}
// Calling the function
myFunc();
// Anonymous Self-invoking Function
(function() {
  // Do some stuff;
})();
const myFunc = arg => {
    console.log("hello", arg)
} 
obj1.myMethod(), the reference to obj1 gets assigned (bound) to this variable. In other words, the value of this will be obj1 inside myMethod.Example 1
var obj1 = {
  attribute: "xyz",
  myMethod: function () {  // Method
    console.log(this.attribute);
  }
};
// Call the method
obj1.myMethod();
obj1 is an object and myMethod is a method which is associated with obj1.Example 2
class MyAwesomeClass {
  myMethod() {
    console.log("hi there");
  }
}
const obj1 = new MyAwesomeClass();
obj1.myMethod();
var obj1 = {
  prop1: "buddy"
}; 
var myFunc = function () {
  console.log("Hi there", this);
};
// let's call myFunc as a function: 
myFunc(); // will output "Hi there undefined" or "Hi there Window"
 
obj1.myMethod = myFunc;
//now we're calling myFunc as a method of obj1, so this will point to obj1
obj1.myMethod(); // will print "Hi there" following with obj1. 
Question 26. What is IIFE (Immediately Invoked Function Expression) and how it can be useful?
Answer
Definition
(function() {
  console.log("Hi, I'm IIFE!");
})();
// outputs "Hi, I'm IIFE!"
Explanation
function a () {}) and function expressions (var a = function() {})? So, IIFE is a function expression. To make it an expression we surround our function declaration into the parens. We do it to explicitly tell the parser that it's an expression, not a statement (JS doesn't allow statements in parens).() braces, this is how we run the function we just declared.- The function inside IIFE doesn't have to be anonymous. This one will work perfectly fine and will help to detect your function in a stacktrace during debugging:(function myIIFEFunc() { console.log("Hi, I'm IIFE!"); })(); // outputs "Hi, I'm IIFE!" 
- It can take some parameters:(function myIIFEFunc(param1) { console.log("Hi, I'm IIFE, " + param1); })("Yuri"); // outputs "Hi, I'm IIFE, Yuri!" Here there value"Yuri"is passed to theparam1of the function.
- It can return a value:var result = (function myIIFEFunc(param1) { console.log("Hi, I'm IIFE, " + param1); return 1; })("Yuri"); // outputs "Hi, I'm IIFE, Yuri!" // result variable will contain 1 
- You don't have to surround the function declaration into parens, although it's the most common way to define IIFE. Instead you can use any of the following forms:- ~function(){console.log("hi I'm IIFE")}()
- !function(){console.log("hi I'm IIFE")}()
- +function(){console.log("hi I'm IIFE")}()
- -function(){console.log("hi I'm IIFE")}()
- (function(){console.log("hi I'm IIFE")}());
- var i = function(){console.log("hi I'm IIFE")}();
- true && function(){ console.log("hi I'm IIFE") }();
- 0, function(){ console.log("hi I'm IIFE") }();
- new function(){ console.log("hi I'm IIFE") }
- new function(){ console.log("hi I'm IIFE") }()
 Please don't use all these forms to impress colleagues, but be prepared that you can encounter them in someone's code.
Applications and usefulness
- Use the IIFE for isolating parts of the code to hide details of implementation.
- Specify the input interface of your code by passing commonly used global objects (window, document, jQuery, etc.) IIFE’s parameters, and then reference these global objects within the IIFE via a local scope.
- Use it in closures, when you use closures in loops.
- IIFE is the basis of in the module pattern in ES5 code, it helps to prevent polluting the global scope and provide the module interface to the outside.
Question 27. Describe Singleton Pattern In JavaScript
Answer
- There should be only one instance allowed for a class and
- We should allow global point of access to that single instance
It is an object that is used to create namespace and group together a related set of methods and attributes (encapsulation) and if we allow to initiate then it can be initiated only once.
function findUserName(id) {
}
/* Later in the page another programmer
added code */
var findUserName = $('#user_list');
/* You are trying to call :( */
console.log(findUserName())
/*  Using Namespace */
var MyNameSpace = {
  findUserName : function(id) {},
  // Other methods and attribute go here as well
}
/* Later in the page another programmer
added code */
var findUserName = $('#user_list');
/* You are trying to call and you make this time workable */
console.log(MyNameSpace.findUserName());
Singleton Design Pattern Implementation
/* Lazy Instantiation skeleton for a singleton pattern */
var MyNameSpace = {};
MyNameSpace.Singleton = (function() {
  // Private attribute that holds the single instance
  var singletonInstance;  
  // All of the normal code goes here
  function constructor() {
    // Private members
    var privateVar1 = "Nishant";
    var privateVar2 = [1,2,3,4,5];
    function privateMethod1() {
      // code stuff
    }
    function privateMethod1() {
      // code stuff
    }
    return {
      attribute1 : "Nishant",
      publicMethod: function() {
        alert("Nishant");// some code logic
      }
    }
  }
  return {
    // public method (Global access point to Singleton object)
    getInstance: function() {
      //instance already exist then return  
      if(!singletonInstance) {
        singletonInstance = constructor();
      }
      return singletonInstance;           
    }           
  }
})();   
// getting access of publicMethod
console.log(MyNamespace.Singleton.getInstance().publicMethod());
Question 28. What are the ways of creating objects in JavaScript ?
Answer
Method 1: Function based
Employeeand used it as a constructor by calling it with the new operator.  function Employee(fName, lName, age, salary){
  	this.firstName = fName;
  	this.lastName = lName;
  	this.age = age;
  	this.salary = salary;
  }
  // Creating multiple object which have similar property but diff value assigned to object property.
  var employee1 = new Employee('John', 'Moto', 24, '5000$');
  var employee1 = new Employee('Ryan', 'Jor', 26, '3000$');
  var employee1 = new Employee('Andre', 'Salt', 26, '4000$');
Method 2: Object Literal
var employee = {
	name : 'Nishant',
	salary : 245678,
	getName : function(){
		return this.name;
	}
}
var employee = {
	name : 'Nishant',
	salary : 245678,
	address : {
		addressLine1 : 'BITS Pilani',
		addressLine2 : 'Vidya Vihar'.
		phoneNumber: {
		  workPhone: 7098889765,
		  homePhone: 1234567898
		}
	}
}
Method 3: From Object using new keyword
Object's constructor function.var employee = new Object(); // Created employee object using new keywords and Object()
employee.name = 'Nishant';
employee.getName = function(){
	return this.name;
}
Method 4:** Using Object.create
Object.create(obj) will create a new object and set the obj as its prototype. It’s a modern way to create objects that inherit properties from other objects. Object.create function doesn’t run the constructor. You can use Object.create(null) when you don’t want your object to inherit the properties of Object.Question 29. Write a function called deepClone which takes an object and creates a object copy of it.
var newObject = deepClone(obj);
function deepClone(object){
	var newObject = {};
	for(var key in object){
		if(typeof object[key] === 'object'){
		 newObject[key] = deepClone(object[key]);
		}else{
		 newObject[key] = object[key];
		}
	}
	return newObject;
}
personalDetail this object contains some property which again a type of object here as you can see address is an object and phoneNumber in side an address is also an object. In simple term personalDetail is nested object(object inside object). So Here deep copy means we have to copy all the property of personalDetail object including nested object.var personalDetail = {
	name : 'Nishant',
	address : {
	  location: 'xyz',
	  zip : '123456',
	  phoneNumber : {
	    homePhone: 8797912345,
	    workPhone : 1234509876
	  }
	}
}
Question 30. Best way to detect undefined object property in JavaScript.
Suppose we have given an objectperson
var person = {
	name: 'Nishant',
	age : 24
}
person object has a name and age property. Now we are trying to access the salary property which we haven't declared on the person object so while accessing it will return undefined. So how we will ensure whether property is undefined or not before performing some operation over it?typeof operator to check undefinedif(typeof someProperty === 'undefined'){
	console.log('something is undefined here');
}
if(typeof person.salary === 'undefined'){
	console.log("salary is undefined here because we haven't declared");
}
Question 31. Write a function called Clone which takes an object and creates a object copy of it but not copy deep property of object.
   var objectLit = {foo : 'Bar'}; 
	var cloneObj = Clone(obj); // Clone is the function which you have to write 
	console.log(cloneObj === Clone(objectLit)); // this should return false
	console.log(cloneObj == Clone(objectLit)); // this should return true
function Clone(object){
  var newObject = {};
  for(var key in object){
  	newObject[key] = object[key];
  }
  return newObject;
}
Question 32. What are promises and how they are useful?
pending, fulfilled and rejected) and works like a state machine.then method, where you can specify what to do when the promise is fulfilled or rejected.then() blocks, thus avoiding the callback hell. You can handle errors in the catch() block. After a promise is set to fulfilled or rejected state, it becomes immutable.- async/awaitwhich makes the code appear even more linear
- RxJS observables can be viewed as the recyclable promises
Question 33. How to check whether a key exist in a JavaScript object or not.
person object with property name and agevar person = {
	name: 'Nishant',
	age: 24
}
name property exist in person object or not ?in operator on objet to check own property or inherited property.console.log('name' in person); // checking own property print true 
console.log('salary' in person); // checking undefined property print false
in operator also look into inherited property if it doesn't find property defined as own property. For instance If I check existence of toString property as we know that we haven't declared this property on person object so in operator look into there base property.console.log('toString' in person); // Will print true
hasOwnProperty method of object instance.console.log(person.hasOwnProperty('toString')); // print false
console.log(person.hasOwnProperty('name')); // print true
console.log(person.hasOwnProperty('salary')); // print false
Question 34. What is NaN, why do we need it, and when can it break the page?
NaN stands for “not a number.” and it can break your table of numbers when it has an arithmetic operation that is not allowed. Here are some examples of how you can get NaN:Math.sqrt(-5);
Math.log(-1);
parseFloat("foo"); /* this is common: you get JSON from the server, convert some strings from JSON to a number and end up with NaN in your UI. */
NaN is not equal to any number, it’s not less or more than any number, also it's not equal to itself:NaN !== NaN
NaN < 2 // false
NaN > 2 // false
NaN === 2 // false
isNaN function. This is why we can often see NaN in the webpages: it requires special check which a lot of developers forget to do.Question 35. Fix the bug using ES5 only
var arr = [10, 32, 65, 2];
for (var i = 0; i < arr.length; i++) {
  setTimeout(function() {
    console.log('The index of this number is: ' + i);
  }, 3000);
}
var i with let i.var arr = [10, 32, 65, 2];
for (var i = 0; i < arr.length; i++) {
  setTimeout(function(j) {
    return function () {
      console.log('The index of this number is: ' + j)
    };
  }(i), 3000);
}
Question 36. How to check if the value of a variable in an array?
function(value){
	if("value is an array"){
		// Then perform some operation
	}else{
		// otherwise
	}
}
	function isArray(value){
		return Object.prototype.toString.call(value) === '[object Array]';
	}
 // Duck typing arrays
 function isArray(value){
 	return typeof value.sort === 'function';
 }
sort method of type function. Now assume you have created a object with sort method	var bar = {
		sort: function(){
			// Some code 
		}
	}
isArray(bar) then it will return true because bar object has sort method, But the fact is bar is not an array.function(value){
   // ECMAScript 5 feature
	if(typeof Array.isArray === 'function'){
		return Array.isArray(value);
	}else{
	   return Object.prototype.toString.call(value) === '[object Array]';
	}
}
Question 37. Best way to detect reference values of any type in JavaScript ?
typeof operatorconsole.log(typeof {});           // object
console.log(typeof []);           // object
console.log(typeof new Array());  // object
console.log(typeof null);         // object 
console.log(typeof new RegExp()); // object
console.log(typeof new Date());   // object
object for null (However this is fact that null is an object in JavaScript).instanceof operator.Syntax : value instanceof constructor
//Detecting an array
if(value instanceof Array){
	console.log("value is type of array");
}
// Employee constructor function
function Employee(name){
	this.name = name; // Public property
}
var emp1 = new Employee('John');
console.log(emp1 instanceof Employee); // true
instanceof not only check the constructor which is used to create an object but also check it's prototype chain see below example.console.log(emp1 instanceof Object); // true
Question 38. How does Object.create method works JavaScript?
var employee = {
  name: 'Nishant',
  displayName: function () {
    console.log(this.name);
  }
};
var emp1 = Object.create(employee);
console.log(emp1.displayName());  // output "Nishant"
emp1 that inherits from employee. In other words emp1's prototype is set to employee. After this emp1 is able to access the same properties and method on employee until new properties or method with the same name are defined.displayName() method on emp1 will not automatically override the employee displayName.emp1.displayName = function() {
	console.log('xyz-Anonymous');
};
employee.displayName(); //Nishant
emp1.displayName();//xyz-Anonymous
Object.create() method also allows to specify a second argument which is an object containing additional properties and methods to add to the new object.var emp1 = Object.create(employee, {
	name: {
		value: "John"
	}
});
emp1.displayName(); // "John"
employee.displayName(); // "Nishant"
emp1 is created with it's own value for name, so calling displayName() method will display "John"instead of "Nishant".Question 39. How to use constructor functions for inheritance in JavaScript?
Person class which has name, age, salary properties and incrementSalary() method.function Person(name, age, salary) {
  this.name = name;
  this.age = age;
  this.salary = salary;
  this.incrementSalary = function (byValue) {
    this.salary = this.salary + byValue;
  };
}
function Employee(company){
	this.company = company;
}
//Prototypal Inheritance 
Employee.prototype = new Person("Nishant", 24,5000);
Person to Employeeprototype. After that, every instance of Employee inherits its properties and methods from Person.//Prototypal Inheritance 
Employee.prototype = new Person("Nishant", 24,5000);
var emp1 = new Employee("Google");
console.log(emp1 instanceof Person); // true
console.log(emp1 instanceof Employee); // true
//Defined Person class
function Person(name){
	this.name = name || "Nishant";
}
var obj = {};
// obj inherit Person class properties and method 
Person.call(obj); // constructor inheritance
console.log(obj); // Object {name: "Nishant"}
Person to obj.console.log(name in obj); // true
Question 40. How we can prevent modification of object in JavaScript ?.
var employee = {
	name: "Nishant"
};
// lock the object 
Object.preventExtensions(employee);
// Now try to change the employee object property name
employee.name = "John"; // work fine 
//Now try to add some new property to the object
employee.age = 24; // fails silently unless it's inside the strict mode
var employee = {
	name: "Nishant"
};
// Seal the object 
Object.seal(employee);
console.log(Object.isExtensible(employee)); // false
console.log(Object.isSealed(employee)); // true
delete employee.name // fails silently unless it's in strict mode
// Trying to add new property will give an error
employee.age = 30; // fails silently unless in strict mode
var employee = {
	name: "Nishant"
};
//Freeze the object
Object.freeze(employee); 
// Seal the object 
Object.seal(employee);
console.log(Object.isExtensible(employee)); // false
console.log(Object.isSealed(employee));     // true
console.log(Object.isFrozen(employee));     // true
employee.name = "xyz"; // fails silently unless in strict mode
employee.age = 30;     // fails silently unless in strict mode
delete employee.name   // fails silently unless it's in strict mode
"use strict";
var employee = {
	name: "Nishant"
};
//Freeze the object
Object.freeze(employee); 
// Seal the object 
Object.seal(employee);
console.log(Object.isExtensible(employee)); // false
console.log(Object.isSealed(employee));     // true
console.log(Object.isFrozen(employee));     // true
employee.name = "xyz"; // fails silently unless in strict mode
employee.age = 30;     // fails silently unless in strict mode
delete employee.name;  // fails silently unless it's in strict mode
Question 44. Write a log function which will add prefix (your message) to every message you log using console.log ?
console.log("Some message") then output should be (your message) Some messageconsole.log('your app name' + 'some error message');
function appLog() {
  var args = Array.prototype.slice.call(arguments);
  args.unshift('your app name');
  console.log.apply(console, args);
}
console.log(appLog("Some error message")); 
//output of above console: 'your app name Some error message'
Question 45 . Write a function which will test string as a literal and as an object ?
 // using string literal
 var ltrlStr = "Hi I am string literal";
 // using String constructor function 
 var objStr = new String("Hi I am string object");
 function isString(str) {
 	return typeof(str) == 'string' || str instanceof String;
 }
 
 var ltrlStr = "Hi I am string literal";
 var objStr = new String("Hi I am string object");
 console.log(isString(ltrlStr)); // true
 console.log(isString(objStr)); // true
Question 46 . What is typical use case for anonymous function in JavaScript ?
- No name is needed if function is only used in one place, then there is no need to add a name to function.Let's take the example of setTimeout functionsetTimeout(function(){ alert("Hello"); },1000); Here there is no need of using named function when we are sure that function which will alerthellowould use only once in application.
- Anonymous functions are declared inline and inline functions have advantages in the case that they can access variable in the parent scopes.Let's take a example of event handler. Notify event of particular type (such as click) for a given object.Let say we have HTML element (button) on which we want to add click event and when user do click on button we would like to execute some logic.<button id="myBtn"></button> Add Event Listenervar btn = document.getElementById('myBtn'); btn.addEventListener('click', function () { alert('button clicked'); }); Above example shows used of anonymous function as a callback function in event handler.
- Passing anonymous function as a parameter to calling function.Example:// Function which will execute callback function function processCallback(callback){ if(typeof callback === 'function'){ callback(); } } // Call function and pass anonymous function as callback processCallback(function(){ alert("Hi I am anonymous callback function"); }); 
- It can reduce a bit of code, particularly in recursive function and in callback function.
- Avoid needless global namespace pollutions.
Question 47 . How to set a default parameter value ?
// Define sentEmail function 
// configuration : Configuration object
// provider : Email Service provider, Default would be gmail
def sentEmail(configuration, provider = 'Gmail'):
	# Your code logic
function sentEmail(configuration, provider) {
  // Set default value if user has not passed value for provider
  provider = typeof provider !== 'undefined' ? provider : 'Gmail'  
  // Your code logic
;
}
// In this call we are not passing provider parameter value
sentEmail({
  from: 'xyz@gmail.com',
  subject: 'Test Email'
});
// Here we are passing Yahoo Mail as a provider value
sentEmail({
  from: 'xyz@gmail.com',
  subject: 'Test Email'
}, 'Yahoo Mail');
function sentEmail(configuration, provider) {
  // Set default value if user has not passed value for provider
  provider = provider || 'Gmail'  
  // Your code logic
;
}
// In this call we are not passing provider parameter value
sentEmail({
  from: 'xyz@gmail.com',
  subject: 'Test Email'
});
// Here we are passing Yahoo Mail as a provider value
sentEmail({
  from: 'xyz@gmail.com',
  subject: 'Test Email'
}, 'Yahoo Mail');
Question 48. Write code for merge two JavaScript Object dynamically.
var person = {
	name : 'John',
	age  : 24
}
var address = {
	addressLine1 : 'Some Location x',
	addressLine2 : 'Some Location y',
	city : 'NewYork'
} 
merge(person , address); 
 
/* Now person should have 5 properties 
name , age , addressLine1 , addressLine2 , city */
const merge = (toObj, fromObj) = Object.assign(toObj, fromObj);
function merge(toObj, fromObj) {
  // Make sure both of the parameter is an object
  if (typeof toObj === 'object' && typeof fromObj === 'object') {
    for (var pro in fromObj) {
      // Assign only own properties not inherited properties
      if (fromObj.hasOwnProperty(pro)) {
        // Assign property and value
        toObj[pro] = fromObj[pro];
      }
    }
  }else{
  	throw "Merge function can apply only on object";
  }
}
Question 49. What is non-enumerable property in JavaScript and how you can create one?
var person = {
	name: 'John'
};
person.salary = '10000$';
person['country'] = 'USA';
console.log(Object.keys(person)); // ['name', 'salary', 'country']
name, salary ,country are enumerable hence it's shown up when we called Object.keys(person).var person = {
	name: 'John'
};
person.salary = '10000$';
person['country'] = 'USA';
// Create non-enumerable property
Object.defineProperty(person, 'phoneNo',{
	value : '8888888888',
	enumerable: false
})
Object.keys(person); // ['name', 'salary', 'country']
phoneNo property didn't show up because we made it non-enumerable by setting enumerable:falsephoneNoperson.phoneNo = '7777777777'; 
strict mode. In non-strict mode it won't through any error but it won't change the value of phoneNo.Question 50. What is Function binding ?
var clickHandler = {
	message: 'click event handler',
	handleClick: function(event) {
		console.log(this.message);
	}
};
var btn = document.getElementById('myBtn');
// Add click event to btn
btn.addEventListener('click', clickHandler.handleClick);
click event handlermessage but it actually log undefined.undefined is because of the execution context of clickHandler.handleClick method is not being saved hence this pointing to button btn object. We can fix this issue using bind method.var clickHandler = {
	message: 'click event handler',
	handleClick: function(event) {
		console.log(this.message);
	}
};
var btn = document.getElementById('myBtn');
// Add click event to btn and bind the clickHandler object
btn.addEventListener('click', clickHandler.handleClick.bind(clickHandler));
bind method is available to all the function similar to call and apply method which take argument value of this.Coding Questions
Passing values by reference vs by value
1. What would be the output of following code?
var strA = "hi there";
var strB = strA;
strB="bye there!";
console.log (strA)
'hi there' because we're dealing with strings here. Strings are passed by value, that is, copied.2. What would be the output of following code?
var objA = {prop1: 42};
var objB = objA; 
objB.prop1 = 90;
console.log(objA) 
{prop1: 90} because we're dealing with objects here. Objects are passed by reference, that is, objA and objBpoint to the same object in memory.3. What would be the output of following code?
var objA = {prop1: 42};
var objB = objA;
objB = {};
console.log(objA)
{prop1: 42}.objA to objB, the objB variable will point to the same object as the objB variable.objB to an empty object, we simply change where objB variable references to. This doesn't affect where objA variable references to.4. What would be the output of following code?
var arrA = [0,1,2,3,4,5];
var arrB = arrA;
arrB[0]=42;
console.log(arrA)
[42,1,2,3,4,5].arrA and arrB point to the same array [0,1,2,3,4,5]. That's why changing the first element of the arrB will also modify arrA: it's the same array in the memory.5. What would be the output of following code?
var arrA = [0,1,2,3,4,5];
var arrB = arrA.slice();
arrB[0]=42;
console.log(arrA)
[0,1,2,3,4,5].slice function copies all the elements of the array returning the new array. That's why arrA and arrB reference two completely different arrays.5. What would be the output of following code?
var arrA = [{prop1: "value of array A!!"},  {someProp: "also value of array A!"}, 3,4,5];
var arrB = arrA;
arrB[0].prop1=42;
console.log(arrA);
[{prop1: 42}, {someProp: "also value of array A!"}, 3,4,5].arrB[0] is the same as changing arrA[0]6. What would be the output of following code?
var arrA = [{prop1: "value of array A!!"},  {someProp: "also value of array A!"}];
var arrB = arrA.slice();
arrB[0].prop1=42;
console.log(arrA);
[{prop1: 42}, {someProp: "also value of array A!"}, 3,4,5].slice function copies all the elements of the array returning the new array. However, it doesn't do deep copying. Instead it does shallow copying. You can imagine slice implemented like this:function slice(arr) {
   var result = [];
   for (i = 0; i< arr.length; i++) {
       result.push(arr[i]);
   }
   return result; 
}
result.push(arr[i]). If arr[i] happens to be a number or string, it will be passed by value, in other words, copied. If arr[i] is an object, it will be passed by reference.arr[0] is an object {prop1: "value of array A!!"}. Only the reference to this object will be copied. This effectively means that arrays arrA and arrB share first two elements.arrB[0] in arrB will also change the arrA[0].Hoisting
1. console.log(employeeId);
- Some Value
- Undefined
- Type Error
- ReferenceError: employeeId is not defined
2. What would be the output of following code?
console.log(employeeId);
var employeeId = '19000';
- Some Value
- undefined
- Type Error
- ReferenceError: employeeId is not defined
3. What would be the output of following code?
var employeeId = '1234abe';
(function(){
	console.log(employeeId);
	var employeeId = '122345';
})();
- '122345'
- undefined
- Type Error
- ReferenceError: employeeId is not defined
4. What would be the output of following code?
var employeeId = '1234abe';
(function() {
	console.log(employeeId);
	var employeeId = '122345';
	(function() {
		var employeeId = 'abc1234';
	}());
}());
- '122345'
- undefined
- '1234abe'
- ReferenceError: employeeId is not defined
5. What would be the output of following code?
(function() {
	console.log(typeof displayFunc);
	var displayFunc = function(){
		console.log("Hi I am inside displayFunc");
	}
}());
- undefined
- function
- 'Hi I am inside displayFunc'
- ReferenceError: displayFunc is not defined
6. What would be the output of following code?
var employeeId = 'abc123';
function foo(){
	employeeId = '123bcd';
	return;
}
foo();
console.log(employeeId);
- undefined
- '123bcd'
- 'abc123'
- ReferenceError: employeeId is not defined
7. What would be the output of following code?
var employeeId = 'abc123';
function foo() {
	employeeId = '123bcd';
	return;
	function employeeId() {}
}
foo();
console.log(employeeId);
- undefined
- '123bcd'
- 'abc123'
- ReferenceError: employeeId is not defined
8. What would be the output of following code?
var employeeId = 'abc123';
function foo() {
	employeeId();
	return;
	function employeeId() {
		console.log(typeof employeeId);
	}
}
foo();
- undefined
- function
- string
- ReferenceError: employeeId is not defined
9. What would be the output of following code?
function foo() {
	employeeId();
	var product = 'Car'; 
	return;
	function employeeId() {
		console.log(product);
	}
}
foo();
- undefined
- Type Error
- 'Car'
- ReferenceError: product is not defined
10. What would be the output of following code?
(function foo() {
	bar();
	function bar() {
		abc();
		console.log(typeof abc);
	}
	function abc() {
		console.log(typeof bar);
	}
}());
- undefined undefined
- Type Error
- function function
- ReferenceError: bar is not defined
Objects
1. What would be the output of following code ?
(function() {
	'use strict';
	var person = {
		name: 'John'
	};
	person.salary = '10000$';
	person['country'] = 'USA';
	Object.defineProperty(person, 'phoneNo', {
		value: '8888888888',
		enumerable: true
	})
	console.log(Object.keys(person)); 
})();
- Type Error
- undefined
- ["name", "salary", "country", "phoneNo"]
- ["name", "salary", "country"]
2. What would be the output of following code ?
(function() {
	'use strict';
	var person = {
		name: 'John'
	};
	person.salary = '10000$';
	person['country'] = 'USA';
	Object.defineProperty(person, 'phoneNo', {
		value: '8888888888',
		enumerable: false
	})
	console.log(Object.keys(person)); 
})();
- Type Error
- undefined
- ["name", "salary", "country", "phoneNo"]
- ["name", "salary", "country"]
3. What would be the output of following code ?
(function() {
	var objA = {
		foo: 'foo',
		bar: 'bar'
	};
	var objB = {
		foo: 'foo',
		bar: 'bar'
	};
	console.log(objA == objB);
	console.log(objA === objB);
}());
- false true
- false false
- true false
- true true
4. What would be the output of following code ?
(function() {
	var objA = new Object({foo: "foo"});
	var objB = new Object({foo: "foo"});
	console.log(objA == objB);
	console.log(objA === objB);
}());
- false true
- false false
- true false
- true true
5. What would be the output of following code ?
(function() {
	var objA = Object.create({
		foo: 'foo'
	});
	var objB = Object.create({
		foo: 'foo'
	});
	console.log(objA == objB);
	console.log(objA === objB);
}());
- false true
- false false
- true false
- true true
6. What would be the output of following code ?
(function() {
	var objA = Object.create({
		foo: 'foo'
	});
	var objB = Object.create(objA);
	console.log(objA == objB);
	console.log(objA === objB);
}());
- false true
- false false
- true false
- true true
7. What would be the output of following code ?
(function() {
	var objA = Object.create({
		foo: 'foo'
	});
	var objB = Object.create(objA);
	console.log(objA.toString() == objB.toString());
	console.log(objA.toString() === objB.toString());
}());
- false true
- false false
- true false
- true true
8. What would be the output of following code ?
(function() {
	var objA = Object.create({
		foo: 'foo'
	});
	var objB = objA;
	console.log(objA == objB);
	console.log(objA === objB);
	console.log(objA.toString() == objB.toString());
	console.log(objA.toString() === objB.toString());
}());
- true true true false
- true false true true
- true true true true
- true true false false
9. What would be the output of following code ?
(function() {
	var objA = Object.create({
		foo: 'foo'
	});
	var objB = objA;
	objB.foo = 'bar';
	console.log(objA.foo);
	console.log(objB.foo);
}());
- foo bar
- bar bar
- foo foo
- bar foo
10. What would be the output of following code ?
(function() {
	var objA = Object.create({
		foo: 'foo'
	});
	var objB = objA;
	objB.foo = 'bar';
	delete objA.foo;
	console.log(objA.foo);
	console.log(objB.foo);
}());
- foo bar
- bar bar
- foo foo
- bar foo
11. What would be the output of following code ?
(function() {
	var objA = {
		foo: 'foo'
	};
	var objB = objA;
	objB.foo = 'bar';
	delete objA.foo;
	console.log(objA.foo);
	console.log(objB.foo);
}());
- foo bar
- undefined undefined
- foo foo
- undefined bar
Arrays
1. What would be the output of following code?
(function() {
	var array = new Array('100');
	console.log(array);
	console.log(array.length);
}());
- undefined undefined
- [undefined × 100] 100
- ["100"] 1
- ReferenceError: array is not defined
2. What would be the output of following code?
(function() {
	var array1 = [];
	var array2 = new Array(100);
	var array3 = new Array(['1',2,'3',4,5.6]);
	console.log(array1);
	console.log(array2);
	console.log(array3);
	console.log(array3.length);
}());
- [] [] [Array[5]] 1
- [] [undefined × 100] Array[5] 5
- [] [] ['1',2,'3',4,5.6] 5
- [] [] [Array[5]] 5
3. What would be the output of following code?
(function () {
  var array = new Array('a', 'b', 'c', 'd', 'e');
  array[10] = 'f';
  delete array[10];
  console.log(array.length);
}());
- 11
- 5
- 6
- undefined
4. What would be the output of following code?
(function(){
	var animal = ['cow','horse'];
		animal.push('cat');
		animal.push('dog','rat','goat');
		console.log(animal.length);
})();
- 4
- 5
- 6
- undefined
5. What would be the output of following code?
(function(){
	var animal = ['cow','horse'];
		animal.push('cat');
		animal.unshift('dog','rat','goat');
		console.log(animal);
})();
- [ 'dog', 'rat', 'goat', 'cow', 'horse', 'cat' ]
- [ 'cow', 'horse', 'cat', 'dog', 'rat', 'goat' ]
- Type Error
- undefined
6. What would be the output of following code?
(function(){
	var array = [1,2,3,4,5];
	console.log(array.indexOf(2));
	console.log([{name: 'John'},{name : 'John'}].indexOf({name:'John'}));
	console.log([[1],[2],[3],[4]].indexOf([3]));
	console.log("abcdefgh".indexOf('e'));
})();
- 1 -1 -1 4
- 1 0 -1 4
- 1 -1 -1 -1
- 1 undefined -1 4
7. What would be the output of following code?
(function(){
	var array = [1,2,3,4,5,1,2,3,4,5,6];
	console.log(array.indexOf(2));
	console.log(array.indexOf(2,3));
	console.log(array.indexOf(2,10));
})();
- 1 -1 -1
- 1 6 -1
- 1 1 -1
- 1 undefined undefined
8. What would be the output of following code?
(function(){
	var numbers = [2,3,4,8,9,11,13,12,16];
	var even = numbers.filter(function(element, index){
		return element % 2 === 0; 
	});
	console.log(even);
	var containsDivisibleby3 = numbers.some(function(element, index){
		return element % 3 === 0;
	});
	console.log(containsDivisibleby3);	
})();
- [ 2, 4, 8, 12, 16 ] [ 0, 3, 0, 0, 9, 0, 12]
- [ 2, 4, 8, 12, 16 ] [ 3, 9, 12]
- [ 2, 4, 8, 12, 16 ] true
- [ 2, 4, 8, 12, 16 ] false
9. What would be the output of following code?
(function(){
	var containers = [2,0,false,"", '12', true];
	var containers = containers.filter(Boolean);
	console.log(containers);
	var containers = containers.filter(Number);
	console.log(containers);
	var containers = containers.filter(String);
	console.log(containers);
	var containers = containers.filter(Object);
	console.log(containers);		
})();
- [ 2, '12', true ] [ 2, '12', true ] [ 2, '12', true ] [ 2, '12', true ]
- [false, true] [ 2 ] ['12'] [ ]
- [2,0,false,"", '12', true] [2,0,false,"", '12', true] [2,0,false,"", '12', true] [2,0,false,"", '12', true]
- [ 2, '12', true ] [ 2, '12', true, false ] [ 2, '12', true,false ] [ 2, '12', true,false]
10. What would be the output of following code?
(function(){
	var list = ['foo','bar','john','ritz'];
	    console.log(list.slice(1));	
	    console.log(list.slice(1,3));
	    console.log(list.slice());
	    console.log(list.slice(2,2));
	    console.log(list);				
})();
- [ 'bar', 'john', 'ritz' ] [ 'bar', 'john' ] [ 'foo', 'bar', 'john', 'ritz' ] [] [ 'foo', 'bar', 'john', 'ritz' ]
- [ 'bar', 'john', 'ritz' ] [ 'bar', 'john','ritz ] [ 'foo', 'bar', 'john', 'ritz' ] [] [ 'foo', 'bar', 'john', 'ritz' ]
- [ 'john', 'ritz' ] [ 'bar', 'john' ] [ 'foo', 'bar', 'john', 'ritz' ] [] [ 'foo', 'bar', 'john', 'ritz' ]
- [ 'foo' ] [ 'bar', 'john' ] [ 'foo', 'bar', 'john', 'ritz' ] [] [ 'foo', 'bar', 'john', 'ritz' ]
11. What would be the output of following code?
(function(){
	var list = ['foo','bar','john'];
	    console.log(list.splice(1));		
	    console.log(list.splice(1,2));
	    console.log(list);			
})();
- [ 'bar', 'john' ] [] [ 'foo' ]
- [ 'bar', 'john' ] [] [ 'bar', 'john' ]
- [ 'bar', 'john' ] [ 'bar', 'john' ] [ 'bar', 'john' ]
- [ 'bar', 'john' ] [] []
12. What would be the output of following code?
(function(){
	var arrayNumb = [2, 8, 15, 16, 23, 42];
	arrayNumb.sort();
	console.log(arrayNumb);
})();
- [2, 8, 15, 16, 23, 42]
- [42, 23, 26, 15, 8, 2]
- [ 15, 16, 2, 23, 42, 8 ]
- [ 2, 8, 15, 16, 23, 42 ]
Functions
1. What would be the output of following code ?
function funcA(){
	console.log("funcA ", this);
	(function innerFuncA1(){
		console.log("innerFunc1", this);
		(function innerFunA11(){
			console.log("innerFunA11", this);
		})();
	})();
}
	
console.log(funcA());
- funcA Window {...} innerFunc1 Window {...} innerFunA11 Window {...}
- undefined
- Type Error
- ReferenceError: this is not defined
2. What would be the output of following code ?
var obj = {
	message: "Hello",
	innerMessage: !(function() {
		console.log(this.message);
	})()
};
	
console.log(obj.innerMessage);
- ReferenceError: this.message is not defined
- undefined
- Type Error
- undefined true
3. What would be the output of following code ?
var obj = {
	message: "Hello",
	innerMessage: function() {
		console.log(this.message);
	}
};
	
console.log(obj.innerMessage());
- Hello
- undefined
- Type Error
- ReferenceError: this.message is not defined
4. What would be the output of following code ?
var obj = {
  message: 'Hello',
  innerMessage: function () {
    (function () {
      console.log(this.message);
    }());
  }
};
console.log(obj.innerMessage());
- Type Error
- Hello
- undefined
- ReferenceError: this.message is not defined
5. What would be the output of following code ?
var obj = {
  message: 'Hello',
  innerMessage: function () {
  	var self = this;
    (function () {
      console.log(self.message);
    }());
  }
};
console.log(obj.innerMessage());
- Type Error
- 'Hello'
- undefined
- ReferenceError: self.message is not defined
6. What would be the output of following code ?
function myFunc(){
	console.log(this.message);
}
myFunc.message = "Hi John";
	
console.log(myFunc());
- Type Error
- 'Hi John'
- undefined
- ReferenceError: this.message is not defined
7. What would be the output of following code ?
function myFunc(){
	console.log(myFunc.message);
}
myFunc.message = "Hi John";
	
console.log(myFunc());
- Type Error
- 'Hi John'
- undefined
- ReferenceError: this.message is not defined
8. What would be the output of following code ?
function myFunc() {
  myFunc.message = 'Hi John';
  console.log(myFunc.message);
}
console.log(myFunc());
- Type Error
- 'Hi John'
- undefined
- ReferenceError: this.message is not defined
9. What would be the output of following code ?
function myFunc(param1,param2) {
  console.log(myFunc.length);
}
console.log(myFunc());
console.log(myFunc("a","b"));
console.log(myFunc("a","b","c","d"));
- 2 2 2
- 0 2 4
- undefined
- ReferenceError
10. What would be the output of following code ?
function myFunc() {
  console.log(arguments.length);
}
console.log(myFunc());
console.log(myFunc("a","b"));
console.log(myFunc("a","b","c","d"));
- 2 2 2
- 0 2 4
- undefined
- ReferenceError
Object Oriented
1. What would be the output of following code ?
function Person(name, age){
	this.name = name || "John";
	this.age = age || 24;
	this.displayName = function(){
		console.log(this.name);
	}
}
Person.name = "John";
Person.displayName = function(){
	console.log(this.name);
}
var person1 = new Person('John');
	person1.displayName();
	Person.displayName();
- John Person
- John John
- John undefined
- John John
Scopes
1. What would be the output of following code ?
function passWordMngr() {
	var password = '12345678';
	this.userName = 'John';
	return {
		pwd: password
	};
}
// Block End
var userInfo = passWordMngr();
console.log(userInfo.pwd);
console.log(userInfo.userName);
- 12345678 Window
- 12345678 John
- 12345678 undefined
- undefined undefined
2. What would be the output of following code ?
var employeeId = 'aq123';
function Employee() {
  this.employeeId = 'bq1uy';
}
console.log(Employee.employeeId);
- Reference Error
- aq123
- bq1uy
- undefined
3. What would be the output of following code ?
var employeeId = 'aq123';
function Employee() {
	this.employeeId = 'bq1uy';
}
console.log(new Employee().employeeId);
Employee.prototype.employeeId = 'kj182';
Employee.prototype.JobId = '1BJKSJ';
console.log(new Employee().JobId);
console.log(new Employee().employeeId);
- bq1uy 1BJKSJ bq1uy undefined
- bq1uy 1BJKSJ bq1uy
- bq1uy 1BJKSJ kj182
- undefined 1BJKSJ kj182
4. What would be the output of following code ?
var employeeId = 'aq123';
(function Employee() {
	try {
		throw 'foo123';
	} catch (employeeId) {
		console.log(employeeId);
	}
	console.log(employeeId);
}());
- foo123 aq123
- foo123 foo123
- aq123 aq123
- foo123 undefined
Call, Apply, Bind
1. What would be the output of following code ?
(function() {
	var greet = 'Hello World';
	var toGreet = [].filter.call(greet, function(element, index) {
		return index > 5;
	});
	console.log(toGreet);
}());
- Hello World
- undefined
- World
- [ 'W', 'o', 'r', 'l', 'd' ]
2. What would be the output of following code ?
(function() {
	var fooAccount = {
		name: 'John',
		amount: 4000,
		deductAmount: function(amount) {
			this.amount -= amount;
			return 'Total amount left in account: ' + this.amount;
		}
	};
	var barAccount = {
		name: 'John',
		amount: 6000
	};
	var withdrawAmountBy = function(totalAmount) {
		return fooAccount.deductAmount.bind(barAccount, totalAmount);
	};
	console.log(withdrawAmountBy(400)());
	console.log(withdrawAmountBy(300)());
}());
- Total amount left in account: 5600 Total amount left in account: 5300
- undefined undefined
- Total amount left in account: 3600 Total amount left in account: 3300
- Total amount left in account: 5600 Total amount left in account: 5600
3. What would be the output of following code ?
(function() {
	var fooAccount = {
		name: 'John',
		amount: 4000,
		deductAmount: function(amount) {
			this.amount -= amount;
			return this.amount;
		}
	};
	var barAccount = {
		name: 'John',
		amount: 6000
	};
	var withdrawAmountBy = function(totalAmount) {
		return fooAccount.deductAmount.apply(barAccount, [totalAmount]);
	};
	console.log(withdrawAmountBy(400));
	console.log(withdrawAmountBy(300));
	console.log(withdrawAmountBy(200));
}());
- 5600 5300 5100
- 3600 3300 3100
- 5600 3300 5100
- undefined undefined undefined
4. What would be the output of following code ?
(function() {
	var fooAccount = {
		name: 'John',
		amount: 6000,
		deductAmount: function(amount) {
			this.amount -= amount;
			return this.amount;
		}
	};
	var barAccount = {
		name: 'John',
		amount: 4000
	};
	var withdrawAmountBy = function(totalAmount) {
		return fooAccount.deductAmount.call(barAccount, totalAmount);
	};
	console.log(withdrawAmountBy(400));
	console.log(withdrawAmountBy(300));
	console.log(withdrawAmountBy(200));
}());
- 5600 5300 5100
- 3600 3300 3100
- 5600 3300 5100
- undefined undefined undefined
5. What would be the output of following code ?
(function greetNewCustomer() {
	console.log('Hello ' + this.name);
}.bind({
	name: 'John'
})());
- Hello John
- Reference Error
- Window
- undefined
6. Suggest your question!
Callback Functions
1. What would be the output of following code ?
function getDataFromServer(apiUrl){
    var name = "John";
	return {
		then : function(fn){
			fn(name);
		}
	}
}
getDataFromServer('www.google.com').then(function(name){
	console.log(name);
});
- John
- undefined
- Reference Error
- fn is not defined
2. What would be the output of following code ?
(function(){
	var arrayNumb = [2, 8, 15, 16, 23, 42];
	Array.prototype.sort = function(a,b){
		return a - b;
	};
	arrayNumb.sort();
	console.log(arrayNumb);
})();
(function(){
	var numberArray = [2, 8, 15, 16, 23, 42];
	numberArray.sort(function(a,b){
		if(a == b){
			return 0;
		}else{
			return a < b ? -1 : 1;
		}
	});
	console.log(numberArray);
})();
(function(){
	var numberArray = [2, 8, 15, 16, 23, 42];
	numberArray.sort(function(a,b){
		return a-b;
	});
	console.log(numberArray);
})();
- [ 2, 8, 15, 16, 23, 42 ] [ 2, 8, 15, 16, 23, 42 ] [ 2, 8, 15, 16, 23, 42 ]
- undefined undefined undefined
- [42, 23, 16, 15, 8, 2] [42, 23, 16, 15, 8, 2] [42, 23, 16, 15, 8, 2]
- Reference Error
Return Statement
1. What would be the output of following code ?
(function(){
	function sayHello(){
		var name = "Hi John";
		return 
		{
			fullName: name
		}
	}
	console.log(sayHello().fullName);
})();
- Hi John
- undefined
- Reference Error
- Uncaught TypeError: Cannot read property 'fullName' of undefined
2. What would be the output of following code ?
function getNumber(){
	return (2,4,5);
}
var numb = getNumber();
console.log(numb);
- 5
- undefined
- 2
- (2,4,5)
3. What would be the output of following code ?
function getNumber(){
	return;
}
var numb = getNumber();
console.log(numb);
- null
- undefined
- ""
- 0
4**. What would be the output of following code ?
function mul(x){
	return function(y){
		return [x*y, function(z){
			return x*y + z;
		}];
	}
}
console.log(mul(2)(3)[0]);
console.log(mul(2)(3)[1](4));
- 6, 10
- undefined undefined
- Reference Error
- 10, 6
5**. What would be the output of following code ?
function mul(x) {
	return function(y) {
		return {
			result: x * y,
			sum: function(z) {
				return x * y + z;
			}
		};
	};
}
console.log(mul(2)(3).result);
console.log(mul(2)(3).sum(4));
- 6, 10
- undefined undefined
- Reference Error
- 10, 6
6. What would be the output of following code ?
function mul(x) {
	return function(y) {
		return function(z) {
			return function(w) {
				return function(p) {
					return x * y * z * w * p;
				};
			};
		};
	};
}
console.log(mul(2)(3)(4)(5)(6));
- 720
- undefined
- Reference Error
- Type Error
