0
var varFunc = function declareFunc() {
  console.log(this); // window
  console.log(this.declareFunc); // undefined
  console.log(declareFunc); // function body
}
console.log(this) // window
varFunc();

i know this in function direction to window, but window doesn't has props declareFunc, but , finally this code still console [Function: declareFunc] why?

and if i use Function.name :

var varFunc = function declareFunc() {
  console.log(this); // window
  console.log(declareFunc.name) // "declareFunc"
  console.log(varFunc.name); // "declareFunc". but why?
  console.log(this.declareFunc); // undefined
  console.log(declareFunc); // function body
}
console.log(varFunc.name) // "declareFunc". why?
var aa = function (){}
console.log(aa.name) // "aa"
console.log(this) // window
varFunc();
mrkou47
  • 351
  • 3
  • 6
  • I don't understand anything to your title or your question, but all I can say is that `var varFunc = function declareFunc() { }` is wrong. You want to use either `var varFunc = function() { }` or `function declareFunc() { }`, not a mix. – Jeremy Thille Jul 04 '17 at 11:30
  • @JeremyThille This is what you basically do when using `require`, for example – Serge K. Jul 04 '17 at 11:55
  • The issue is the scoping of a **named function expression**. Google for that. –  Jul 05 '17 at 02:57

1 Answers1

1
var varFunc = function declareFunc() {
  console.log(varFunc===declareFunc);//true
}

This function has now two names: varFunc externally and declareFunc internally, so inside of it, you can access declareFunc,varFunc and window.varFunc , and outside:

console.log(varFunc,declareFunc);//function, undefined/error
Jonas Wilms
  • 132,000
  • 20
  • 149
  • 151