IIFE (Immediately Invoked Function Expression)
다음과 같은 code를 이해하려고 구글링을 해보았음.
var cameraSource = (function(global) {
var id='source-camera', videoElement=null, constraints={video:{facingMode:"environment"}};
function start(opts) {
constraints = opts.constraints;
videoElement = opts.videoElement;
_showCameraPreview(opts.callback);
}
function _showCameraPreview(_callbcak) {
navigator.mediaDevices.getUserMedia(constraints).then( stream => {
videoElement.srcObject = stream;
videoElement.play();
if (_callbcak) {
_callbcak(stream);
}
}).catch( error => console.error(error) );
}
return { id: id, start: start };
})(this);
javascript에서 function을 일단은 어렵다.
https://blog.kevinchisholm.com/javascript/javascript-immediate-functions-basics/ 참고 하길..
아래와 같은 코드는 그냥 정의만 한거다. myFunc(); 라는게 불려야 실행될뿐.
var myFunc = function(){
console.log('simple function');
}
myFunc();
아래와 같은 코드는 function을 괄호로 감쌈으로서 바로 실행까지 된다. 아래 두개의 차이는 잘 모르겟음. 둘다 immediate function 이라는데.. 테스트 해보고. 되는걸로 사용하는게 좋을듯함.
(function(){
console.log('immediate function')
}())
(function(){
console.log('immediate function')
})()
아래와 같은 코드는 function에 argumnet를 넘기는 예제임.
var myname = 'yujin';
(function(name){
console.log('hi,' + name)
}(myname))
https://blog.kevinchisholm.com/javascript/immediate-function-global-javascript-variable/ 도 참고하길..
var foo = {};
foo.name = 'yujin';
foo.say = function{}
foo 라는 아이는 global 변수가 되고.. foo의 property는 접근하는데 제약이 없는듯 하고..
근데 아래처럼 하면.. ‘_name’ 을 private 변수처럼 사용할 수 있는듯함.
var foo = (function(){
var _name = "bart";
var MyConstructor = function(){
this.getName = function(){
return _name;
};
this.setName = function(newName){
_name = newName;
};
}
return new MyConstructor();
})();
console.log( foo.getName() );
console.log( foo.setName( "simpson" ) );
console.log( foo.getName() );